[문제풀이] 방문길이

업데이트:

문제 링크 : 방문길이

풀이 시간 : 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차원 배열 사용