알고리즘
프로그래머스 방문 길이 (JAVA)
박카스마시며코딩
2022. 5. 28. 18:58
https://programmers.co.kr/learn/courses/30/lessons/49994
코딩테스트 연습 - 방문 길이
programmers.co.kr
저는 boolean배열을 통해 문제를 해결하였습니다.
boolean배열을 visited[y][x][방향]으로 하여 현재 지점에서 가는 방향으로 방문 체크를 하였습니다.
하지만 문제는 처음 가본 길의 길이기 때문에 저는 도착지점에서 출발지점의 방문체크도 같이 진행하였습니다.
이후 visited가 false라면 결과값을 늘리고 아니라면 늘리지 않았습니다.
class Solution {
private static final int[] dy = {-1,0,1,0};
private static final int[] dx = {0,1,0,-1};
private static final char UP = 'U';
private static final char DOWN = 'D';
private static final char RIGHT = 'R';
private static final char LEFT = 'L';
private static final int SIZE = 5;
public int solution(String dirs) {
int answer = cal(dirs);
return answer;
}
private int cal(String dirs){
int result = 0;
int y = 0;
int x = 0;
boolean[][][] visited = new boolean[2 * SIZE + 2][2 * SIZE + 2][4];
for(int i = 0 ; i < dirs.length() ; i++){
char dirCh = dirs.charAt(i);
int dir = detectDir(dirCh);
int ny = y + dy[dir];
int nx = x + dx[dir];
if(checkBound(ny,nx)){
if(!visited[y+SIZE][x+SIZE][dir]){
result++;
visited[y+SIZE][x+SIZE][dir] = true;
visited[ny+SIZE][nx+SIZE][(dir+2)%4] = true;
}
y = ny;
x = nx;
}
}
return result;
}
private static int detectDir(char dirCh){
if(dirCh == UP){
return 2;
}
if(dirCh == DOWN){
return 0;
}
if(dirCh == RIGHT){
return 1;
}
if(dirCh == LEFT){
return 3;
}
return -1;
}
private static boolean checkBound(int y,int x){
if(y >= -SIZE && y <= SIZE && x >= -SIZE && x <= SIZE){
return true;
}
return false;
}
}