https://school.programmers.co.kr/learn/courses/30/lessons/49994
이 문제는 방문했던 경로를 다시 방문하는 경우에는 길이 값을 더해주지 않는 문제이다.
초반에는 이 문제를 풀 때, 각 좌표를 이중 배열의 index값으로 선언하고, 그 안에 hashset을 통해 방문한 방향만 넣어주었다. 하지만, 25점으로 모든 test case를 통과하지 못했었다. 다시 생각을 해 보니 한 길을 오른쪽으로 간 것과 왼쪽으로 간 것이 다른 것이 아니라 동일하다는 사실을 깨달았다.
위의 그림처럼 오른쪽으로 한 칸 이동한 경우와, 왼쪽으로 한 칸 이동한 경우는 같은 길을 지난 것이다. 그러므로 반대 방향도 고려 해 주어야 한다.
import java.util.*;
class Solution {
public int solution(String dirs) {
HashSet<String> set = new HashSet<>(); // x,y,방향을 string으로 합쳐서 넣기
int x = 0;
int y = 0;
for (int i = 0; i < dirs.length(); i++) {
if (dirs.charAt(i) == 'R') {
if (x < 5) {
set.add(x + "" + y + "R"); //현재 좌표랑 이동방향을 넣기
x++;
set.add(x + "" + y + "L"); //현재 좌표에서 한 칸 이동한 것의 반대방향을 넣기
}
}
if (dirs.charAt(i) == 'L') {
if (x > -5) {
set.add(x + "" + y + "L");
x--;
set.add(x + "" + y + "R");
}
}
if (dirs.charAt(i) == 'U') {
if (y < 5) {
set.add(x + "" + y + "U");
y++;
set.add(x + "" + y + "D");
}
}
if (dirs.charAt(i) == 'D') {
if (y > -5) {
set.add(x + "" + y + "D");
y--;
set.add(x + "" + y + "U");
}
}
}
return set.size()/2; //양 쪽 방향을 넣었으니까 2로 나누기
}
}