[문제풀이] 방문길이
업데이트:
문제 링크 : 방문길이
풀이 시간 : 40분
1. 문제 풀이
문자열에 맞게 움직이는 시뮬레이션 문제
11x11x4 형태로 만들어 각 위치와 이동방향을 체크하면서
처음 걸어본 길만 체크 합니다.
2. 소스 코드
int answer = 0;
// 0은 위, 1은 아래, 2은 오른쪽, 3은 왼쪽 방향
boolean[][][] map = new boolean[11][11][4];
/// 처음 위치를 (5,5)로 이동하여 마이너스 좌표를 플러스로 바꾼다.
int y=5;
int x=5;
for (int i = 0; i < dirs.length(); i++) {
char c= dirs.charAt(i);
if(c=='U') {
y++;
if(y==11) {
// 범위를 넘어갈 때
y=10;
}else {
// 범위 안에 있을때
if(!map[y-1][x][0]) {
// 처음 가는 길일 때
answer++;
// 원래 자리와 움직이는 자리를 체크
map[y-1][x][0] = true;
map[y][x][1] = true;
}
}
}else if(c=='D') {
y--;
if(y==-1) {
y=0;
}else {
if(!map[y+1][x][1]) {
answer++;
map[y+1][x][1] = true;
map[y][x][0] = true;
}
}
}else if(c=='R') {
x++;
if(x==11) {
x=10;
}else {
if(!map[y][x-1][2]) {
answer++;
map[y][x-1][2] = true;
map[y][x][3] = true;
}
}
}else {
x--;
if(x==-1) {
x=0;
}else {
if(!map[y][x+1][3]) {
answer++;
map[y][x+1][3] = true;
map[y][x][2] = true;
}
}
}
}
return answer;
3. 후기
간단한 2차원 시뮬레이션이 아닌 3차원을 이용한 시뮬레이션
처음에 간 위치 체크하기 위해서 방향을 고려한 3차원 배열 사용