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문제이기 때문에 크게 어렵지 않게 풀 수 있었다.