문제
문제링크
접근
- 처음에는 방문 여부를 체크하면서 정답을 늘려야 하나 고민했지만, set을 이용하면 중복처리를 쉽게 할 수 있을 것 같아서 그 방향으로 생각하였다.
- 중요한 부분은 모든 선분에 대해 고유한 수로 나타내는 getIndex를 잘 작성하면 크게 어려운 부분 없다. (약간 hashCode를 얻기 위한 해싱 함수라 생각하면 편하다)
풀이
import java.util.*;
class Solution {
Set<Integer> visited = new HashSet<>();
int[][] ds = {{0, 1}, {0, -1}, {1, 0}, {-1, 0}};
public int solution(String dirs) {
int r = 0, c = 0;
for (char d : dirs.toCharArray()) {
int di = d == 'D' ? 0 : d == 'U' ? 1 : d == 'R' ? 2 : 3;
int nr = r + ds[di][0];
int nc = c + ds[di][1];
if (nr < -5 || nr > 5 || nc < -5 || nc > 5) continue;
visited.add(getIndex(r, c, nr, nc));
r = nr;
c = nc;
}
return visited.size();
}
private int getIndex(int r, int c, int nr, int nc) {
int lr = (nr + r + 10) * 2;
int lc = (nc + c + 10) * 2;
int res = lr * 100 + lc;
return res;
}
}