해당 알고리즘 자료는 제가 직접 푼 것도 있지만 다른 분들의 풀이과의 비교를 통해 더 나은 알고리즘을 공부하기 위해 정리한 것들입니다.
https://programmers.co.kr/learn/courses/30/lessons/49994
풀이 : 삼차배열을 활용하여 각 방향에 대한 방문여부를 체크한다.
class Solution {
public int solution(String dirs) {
boolean [][][] visited = new boolean [13][13][5];
int x = 6, y = 6;
int answer = 0;
for (int i = 0; i < visited.length; i++) {
for (int j = 0; j < visited.length; j++) {
if(i == 0 || j == 0 || i == visited.length-1 || j == visited.length-1) {
visited[i][j][1] = true;
visited[i][j][2] = true;
visited[i][j][3] = true;
visited[i][j][4] = true;
}
}
}
for (int i = 0; i < dirs.length(); i++) {
char ch = dirs.charAt(i);
switch (ch) {
case 'U':
if(!visited[--y][x][1]) {
visited[y][x][1] = true;
visited[y+1][x][2] = true;
answer++;
}
break;
case 'D':
if(!visited[++y][x][2]) {
visited[y][x][2] = true;
visited[y-1][x][1] = true;
answer++;
}
break;
case 'L':
if(!visited[y][--x][3]) {
visited[y][x][3] = true;
visited[y][x+1][4] = true;
answer++;
}
break;
case 'R':
if(!visited[y][++x][4]) {
visited[y][x][4] = true;
visited[y][x-1][3] = true;
answer++;
}
break;
}
if(x == 0) x++;
if(y == 0) y++;
if(x == visited.length-1) x--;
if(y == visited.length-1) y--;
}
return answer;
}
}