코딩테스트/프로그래머스

[Java] 프로그래머스 - 게임 맵 최단거리 (2단계)

배똥회장 2022. 5. 31. 11:34
728x90
코딩 테스트 풀이 체크리스트
2시간 내에 풀었는가? O
본인의 실력으로 풀었는가? O

 

 

코딩테스트 연습 - 게임 맵 최단거리

[[1,0,1,1,1],[1,0,1,0,1],[1,0,1,1,1],[1,1,1,0,1],[0,0,0,0,1]] 11 [[1,0,1,1,1],[1,0,1,0,1],[1,0,1,1,1],[1,1,1,0,0],[0,0,0,0,1]] -1

programmers.co.kr

 

 

 

 

import java.util.*;
class Solution {
    public int solution(int[][] maps) {
        int row = maps.length;
        int col = maps[0].length;
        boolean[][] check = new boolean[row][col]; //다녀왔는지 체크용
        
        //BFS를 구현하기 위한 큐
        Queue<Point> q = new LinkedList<>();
        q.add(new Point(0, 0, 1));
        
        //상하좌우 움직일 배열
        int[] xMove = {1, -1, 0, 0};
        int[] yMove = {0, 0, -1, 1};
        
        while (!q.isEmpty()) {
            Point p = q.poll();
            int x = p.x;
            int y = p.y;
            int num = p.num;
            
            //만약 x, y가 상대팀 진영이라면 num 리턴하기
            if (x == row - 1 && y == col - 1) return num;
            
            for (int i = 0; i < 4; i++) {
                int xm = x + xMove[i];
                int ym = y + yMove[i];
                
                //움직일 좌표가 범위를 넘진 않았는지, 이미 방문한 좌표인지, 해당 좌표가 벽인지 파악
                if (xm < 0 || ym < 0 || xm >= row || ym >= col) continue;
                if (check[xm][ym] || maps[xm][ym] == 0) continue;
                
                //방문 체크하고 q에 추가하기
                check[xm][ym] = true;
                q.add(new Point(xm, ym, num+1));
            }
        }
        
        //while문을 통과했는데도 리턴되지 않았다면 그냥 -1 리턴
        return -1;
    }
}

class Point {
    int x, y, num;
    public Point(int x, int y, int num) {
        this.x = x;
        this.y = y;
        this.num = num;
    }
}

 

정확성 테스트
테스트 1 통과 (0.31ms, 78.5MB)
테스트 2 통과 (0.26ms, 77.7MB)
테스트 3 통과 (0.32ms, 78.9MB)
테스트 4 통과 (0.29ms, 73.9MB)
테스트 5 통과 (0.30ms, 67.5MB)
테스트 6 통과 (0.29ms, 76.5MB)
테스트 7 통과 (0.37ms, 79.4MB)
테스트 8 통과 (0.29ms, 71.7MB)
테스트 9 통과 (0.38ms, 86.7MB)
테스트 10 통과 (0.44ms, 67.1MB)
테스트 11 통과 (0.30ms, 77.6MB)
테스트 12 통과 (0.31ms, 73.1MB)
테스트 13 통과 (0.44ms, 75.5MB)
테스트 14 통과 (0.40ms, 77.4MB)
테스트 15 통과 (0.28ms, 71.2MB)
테스트 16 통과 (0.39ms, 76.8MB)
테스트 17 통과 (0.41ms, 78.7MB)
테스트 18 통과 (0.26ms, 71.7MB)
테스트 19 통과 (0.36ms, 73.6MB)
테스트 20 통과 (0.32ms, 68.5MB)
테스트 21 통과 (0.26ms, 75.3MB)
효율성 테스트
테스트 1 통과 (10.62ms, 52.9MB)
테스트 2 통과 (3.84ms, 54.3MB)
테스트 3 통과 (9.10ms, 56MB)
테스트 4 통과 (4.86ms, 56.2MB)

 

 

 

 

 

DFS로 풀면 효율성 테스트에서 시간초과가 나오고, BFS로 풀어야 통과함

 

 

 

 

 

728x90