ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 게임맵 최단거리
    개발/코딩테스트 2024. 12. 29. 16:24

    문제 

    ROR 게임은 두 팀으로 나누어서 진행하며, 상대 팀 진영을 먼저 파괴하면 이기는 게임입니다. 따라서, 각 팀은 상대 팀 진영에 최대한 빨리 도착하는 것이 유리합니다.

    cf) 문제의 양이 너무 많아서 링크로 대체 합니다. 

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

     

    풀이 

    주요생각 

    4방향으로 이동 하여 거리를 이동하되 음수 이거나 이미 방문 했을 경우는 재방문을 하지 않는다 

    4방향  = { {1,0} , {0,1} , {-1,0} , {0,-1} }

    방문 여부 boolean[][] visited 

    queue에 저장될 값은 해당 좌표의 위치와 현재 거리를 얼마나 이동햇는지에 대한 값이 필요하다 

    좌표가 마지막으로 이동하면 작업을 종료하고 해당 값을 반환한다 

    만약 그전에 queue에 대상이 없어서 종료가 되면 -1을 반환하도록 한다 

     

       public int solution(int[][] maps) {
       	int[][] array = { {1,0} ,{0,1} ,{-1,0},{0,-1} };
       	int x = maps.length;
        int y = maps[0].length;
        boolean[][]visited = new boolean[x][y];
        Queue<int[]> queue = new LinkedList<>();
        
        queue.add(new int[]{0,0,1});
        visited[0][0] = 1;
        while(!queue.isEmpty()){
    		    int[] poll = queue.poll();
                int pollX = poll[0];
                int pollY = poll[1];        
                int answer = poll[2];  
                if(pollX == x-1 && pollY == y-1){
                    return answer 
                }
            for(int i=0; i<array.length;i++){
                int[] depth = array[i];
                int depthX = pollX+depth[0];
                int depthY = pollY+depth[1];            
    			
                if(depthX>=0 && depthY>=0 && depthX <x && depthY <y
                && !visited[depthX][depthY]
                && maps[depthX][depthY] !=0){
                	queue.add(new int[]{depthX,depthY,answer+1})
                }
            }
        
        }
        
       	return -1;
       }

     

     

    '개발 > 코딩테스트' 카테고리의 다른 글

    프로그래머스 등굣길  (0) 2025.01.11
    프로그래머스 정수 삼각형  (0) 2025.01.05
    이중우선순위큐  (0) 2024.12.26
    다리를 지나는 트럭  (0) 2024.12.22
    기능개발  (1) 2024.12.17

    댓글

Designed by Tistory.