코딩 공부 - 방문 길이
문제
설명
- 좌표평면의 경계가 (5,5), (-5,5), (5,-5), (-5,-5)로 이루어진 좌표평면에서
- (0,0)에서 부터 시작하여 주어진 방향으로 이동하였을때
- 중복되지 않은 이동 거리를 구하는 문제
- 단, 좌표평면을 벗어나는 이동일 경우 무시한다.
코드
#include <string>
#include <set>
#include <iostream>
using namespace std;
#define minDir -5
#define maxDir 5
int solution(string dirs) {
int answer = 0;
set<pair<pair<int,int>,pair<int,int>>> s; // 현재 좌표와 이전 좌표를 저장
int x = 0; // 현재 좌표
int y = 0; // ``
int beforeX; // 이전 좌표
int beforeY; // ``
for (char direction : dirs) {
// 이동 전의 값
beforeX = x;
beforeY = y;
// 좌표평면을 벗어나지 않고, 각 방향으로 이동
if (direction == 'U') {
if (y < maxDir) {
y += 1;
}
}
if (direction == 'D') {
if (y > minDir) {
y -= 1;
}
}
if (direction == 'L') {
if (x > minDir) {
x -= 1;
}
}
if (direction == 'R') {
if (x < maxDir) {
x += 1;
}
}
// 좌표평면 내에서 이동했을 경우
if (beforeX != x || beforeY != y) {
// 이동 경로가 처음일 경우 현재 좌표와 이전 좌표 저장
// (1,2)에서 (1,1)로 가는 경우와 (1,1)에서 (1,2)로 가는 경우 같은 이동으로 처리
if (s.find(make_pair(make_pair(x, y), make_pair(beforeX, beforeY))) == s.end() &&
s.find(make_pair(make_pair(beforeX, beforeY), make_pair(x, y))) == s.end()
) {
s.insert(make_pair(make_pair(x, y), make_pair(beforeX, beforeY)));
}
}
}
answer = s.size();
return answer;
}
공유하기
Twitter Facebook LinkedIn댓글을 남기시려면 Github 로그인을 해주세요