문제 - 방문 길이
이미 지나온 길은 방문 길이에서 제외합니다. 그래서 9번을 움직이지만 8,9번의 움직임은 이미 지나온 길이므로 길이는 7로 출력
처음에는 방문한 곳들은 HashSet을 이용하면 위의 그림에 1번 이동과 7번 이동이 같은 것으로 판단하여 중복제거를 하기 때문에 힘들 것이라고 생각했다. 그래서 3차원 배열을 통해 이전 위치에서 다음 위치로 이동하는 것과 다음 위치에서 이전위치로 움직이는 방향을 둘다 방문처리를 해줌으로써 이를 해결했다. 즉 양방향으로 boolean처리를 했다.
import java.util.*;
class Solution {
public int solution(String dirs) {
int answer = 0;
boolean visited[][][] = new boolean[11][11][4];
int sx = 5,sy=5;
for(int i=0;i<dirs.length();i++)
{
char dir = dirs.charAt(i);
int nx = sx;
int ny = sy;
int d = 0;
if(dir == 'U')
{
nx -= 1;
d =0;
}else if(dir == 'D')
{
d=1;
nx += 1;
}else if(dir == 'R')
{
d=2;
ny += 1;
}
else{
d=3;
ny -= 1;
}
if(0<=nx && nx <11 && 0<= ny && ny <11)
{
if(!visited[nx][ny][d])
{
answer++;
}
int nd =0;
if(d == 0)
{
nd=1;
}else if(d ==1)
{
nd=0;
}else if(d==2)
nd=3;
else
nd=2;
visited[sx][sy][nd] = true;
visited[nx][ny][d] = true;
sx = nx;
sy = ny;
}else
continue;
}
return answer;
}
}