프로그래머스-게임 맵 최단거리

이호영·2022년 4월 9일
0

프로그래머스-Level.2

목록 보기
21/36
import java.util.LinkedList;
import java.util.Queue;

class Solution {
    
     static int[][] dir ={{1, 0}, {0, 1}, {-1, 0}, {0, -1}};
    static int n,m;
    static int[][] dist;
    static boolean[][] visit;

    public int solution(int[][] maps) {
        n=maps.length;
        m=maps[0].length;
        dist=new int[n][m];
        visit=new boolean[n][m];
        bfs(0,0,maps);
        
        if(dist[n-1][m-1] == 0) {
        	return -1;
        }
        return dist[n-1][m-1];
    }

    static void bfs(int x, int y, int[][] maps){
        n=maps.length;
        m=maps[0].length;

        Queue<Integer> q = new LinkedList<>();
        for(int i=0; i<n-1; i++) {
            for (int j = 0; j <m-1; j++) {
                dist[i][j] = -1;
            }
        }

        q.add(x);
        q.add(y);
        dist[x][y]=1;
        visit[x][y]=true;

        while (!q.isEmpty()){
            x=q.poll();
            y=q.poll();
            for(int k=0; k<4; k++){
                int nx=x+dir[k][0];
                int ny=y+dir[k][1];

                if(nx<0 || ny<0 || nx>=n || ny>=m) continue;
                if(maps[nx][ny] ==0) continue;
                if(visit[nx][ny]) continue;
                q.add(nx);
                q.add(ny);
                visit[nx][ny]=true;
                dist[nx][ny]=dist[x][y]+1;
            }
        }
    }
}

0개의 댓글