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

MINSANG YU·2022년 9월 2일
0

프로그래머스

목록 보기
4/15
post-thumbnail

문제링크

핵심

visited 배열을 int형으로 선언해서 visited 배열에 각 칸까지 이동할 수 있는 최솟값을 저장해놓는다.

import java.util.*;

class Solution {
    
    static int[] dr = {-1,0,1,0}, dc = {0,1,0,-1};
    
    static int bfs(int[][] maps) {
        Queue<int[]> q = new ArrayDeque<>();
        int[][] visited = new int[maps.length][maps[0].length];
        int cnt = 0;
        
        q.offer(new int[] {0,0});
        visited[0][0] = 1;
        while(!q.isEmpty()) {
            int[] cur = q.poll();
            int r = cur[0];
            int c = cur[1];
            for(int d=0; d<4; d++) {
                int nr = r+dr[d];
                int nc = c+dc[d];
                if(0<=nr && nr<maps.length && 0<=nc && nc<maps[0].length 
                   && visited[nr][nc]==0 && maps[nr][nc]==1) {
                    visited[nr][nc] = visited[r][c]+1;
                    q.offer(new int[] {nr,nc});
                }
            }
        }
        if(visited[maps.length-1][maps[0].length-1]==0) return -1;
        return visited[maps.length-1][maps[0].length-1];
    }
    public int solution(int[][] maps) {
        int answer = 0;
        
        answer = bfs(maps);
        
        return answer;
    }
}

기본적인 BFS문제이기 때문에 크게 어렵지 않게 풀 수 있었다.

profile
쉿! 공부중

0개의 댓글