https://programmers.co.kr/learn/courses/30/lessons/49994
풀이
시뮬레이션 문제로 전체 시뮬레이션 대상의 크기는 크지 않지만 조건들을 놓치기 쉬운 부분이 있는 문제였다.
2차원 배열로 방문했는지 안했는지 체크 -> X
3차원 배열로 해당 지점에 방문할 때 어느 방향에서 와서 방문한 길인지 체크 -> O
방문한 길이라고 했기 때문에 새로 방문했을 경우만 길이를 체크하는 것이 아니라 한 지점에 대해 4방의 길이를 생성할 수 있기에 그 부분을 주의해야 한다.
추가적으로
4방의 길이를 체크함에 있어 기존위치 -> 신규위치로 변할때
기존위치의 U 방향과 신규의치의 D 방향은 결국 같은 길 인점을 주의해야한다.
예를 들어, UDU를 수행함에 있어 아래와 같이 왔던 길이기에 1만 카운트되야 한다.
import java.util.*;
class Solution {
public int solution(String dirs) {
int answer = 0;
// 3차원 배열 끝 행 UDRL 방향길
int[][][] graph = new int[11][11][4];
int[] dx = {-1, 1, 0, 0}; // UDRL
int[] dy = {0, 0, 1, -1}; // UDRL
// now , next
int x = 5;
int y = 5;
int nx = 0, ny= 0;
// 명령어 처리
for(int i=0; i<dirs.length();i++){
char chr = dirs.charAt(i);
// U
if (chr == 'U'){
// 가능
if(x+dx[0]>= 0 && x+dx[0]<=10 && y+dy[0] >=0 && y+dy[0] <=10){
nx = x+dx[0];
ny = y+dy[0];
// 기존 위치 U 안만들었고, 새로운 위치 D 안만들었으면
if(graph[x][y][0] == 0 && graph[nx][ny][1] ==0){
answer++;
graph[x][y][0] = 1;
graph[nx][ny][1] = 1;
}
x = nx; y = ny;
}
}
// D
else if(chr == 'D'){
// 가능
if(x+dx[1]>= 0 && x+dx[1]<=10 && y+dy[1] >=0 && y+dy[1] <=10){
nx = x+dx[1];
ny = y+dy[1];
// 기존 위치 D 안만들었고, 새로운 위치 U 안만들었으면
if(graph[x][y][1] == 0 && graph[nx][ny][0] ==0){
answer++;
graph[x][y][1] = 1;
graph[nx][ny][0] = 1;
}
x = nx; y = ny;
}
}
// R
else if(chr == 'R'){
// 가능
if(x+dx[2]>= 0 && x+dx[2]<=10 && y+dy[2] >=0 && y+dy[2] <=10){
nx = x+dx[2];
ny = y+dy[2];
// 기존 위치 R 안만들었고, 새로운 위치 L 안만들었으면
if(graph[x][y][2] == 0 && graph[nx][ny][3] ==0){
answer++;
graph[x][y][2] = 1;
graph[nx][ny][3] = 1;
}
x = nx; y = ny;
}
}
// L
else if(chr == 'L'){
// 가능
if(x+dx[3]>= 0 && x+dx[3]<=10 && y+dy[3] >=0 && y+dy[3] <=10){
nx = x+dx[3];
ny = y+dy[3];
// 기존 위치 L 안만들었고, 새로운 위치 R 안만들었으면
if(graph[x][y][3] == 0 && graph[nx][ny][2] ==0){
answer++;
graph[x][y][3] = 1;
graph[nx][ny][2] = 1;
}
x = nx; y = ny;
}
}
}
return answer;
}
}
'Archived(CSE Programming) > 알고리즘(Java)' 카테고리의 다른 글
프로그래머스 - 124 나라의 숫자(Java, LV2) (0) | 2020.10.19 |
---|---|
프로그래머스 - 경주로 건설(Java, LV3, 2020 카카오) (2) | 2020.10.19 |
프로그래머스 - 숫자게임(Java, LV3) (0) | 2020.10.17 |
프로그래머스 - 섬 연결하기(Java, LV3) / MST (0) | 2020.10.17 |
프로그래머스 거스름돈(Java, LV3) /DP (0) | 2020.10.17 |