본문 바로가기
프로그래머스/Lv.2

Summer/Winter Coding(~2018) > 방문 길이 - JAVA

by 아찌방 2024. 1. 10.

 

 

https://school.programmers.co.kr/learn/courses/30/lessons/49994

풀이 - 나의 생각

 

1 -> 2 로 넘어갈 경우

 

방문 길이는 체크 되지만

 

2-> 1 방향으로 가는 경우는

 

체크 되지 않아야 한다.

 

기존에 하던 것처럼 2차원 배열로 방문처리 할 경우

 

위의 경우는 가능하지만

 

3 ->2나, 4->2, 5->2 같은 경우

 

방문 길이가 늘어나야 하지만

 

2가 이미 방문처리 되어 늘어나지 않는다.

 

그걸 어떻게 코딩할까 고민을 하다가

 

방문처리를 3차원으로 하면 되겠다고 생각했다.

 

[방향][맵][맵] 이런 식으로해서

 

들어온 방향 + 반대 방향을 방문 처리 해주면

 

그 외에 방향에서 들어오는 건 방문 길이가 추가 되게 할 수 있다!!

 

 

코드

 

import java.util.*;

class Solution {
    public int solution(String dirs) {
        int answer = 0;
        boolean[][][] visited = new boolean[4][11][11];
        int x = 5, y = 5;
        
        for(int i = 0; i < dirs.length(); i++){
            switch(dirs.charAt(i)){
                case 'U':
                        if(x-1 < 0) continue;
                        x--;
                        if(!visited[0][x][y]){
                            answer++;
                            visited[0][x][y] = true;
                            visited[1][x+1][y] = true;
                        }
                        break;
                case 'D':
                        if(x+1 >= 11) continue;
                        x++;
                        if(!visited[1][x][y]){
                            answer++;
                            visited[1][x][y] = true;
                            visited[0][x-1][y] = true;
                        }
                        break;
                case 'L':
                        if(y-1 < 0) continue;
                        y--;
                        if(!visited[2][x][y]){
                            answer++;
                            visited[2][x][y] = true;
                            visited[3][x][y+1] = true;
                        }
                        break;
                case 'R':
                        if(y+1 >= 11) continue;
                        y++;
                        if(!visited[3][x][y]){
                            answer++;
                            visited[3][x][y] = true;
                            visited[2][x][y-1] = true;
                        }
                        break;
            }
        }
        return answer;
    }
}

 

 

 

 

 

 

 

다음에 또 봐요

 

728x90