문제
https://school.programmers.co.kr/learn/courses/30/lessons/1844
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
코드
import java.util.*;
class Solution {
public int solution(int[][] maps) {
int n = maps.length;
int m = maps[0].length;
int answer = bfs(n, m, maps);
if(answer == 0) return -1;
return answer;
}
public int bfs(int n, int m, int[][] maps){
int dx [] = {1,0,-1,0};
int dy [] = {0,1,0,-1};
int visited [][] = new int [n][m];
Queue<int []> que = new LinkedList<>();
visited[0][0] = 1;
que.add(new int[]{0,0});
while(!que.isEmpty()){
int [] cur = que.poll();
for(int i=0;i<4;i++){
int nx = cur[0] + dx[i];
int ny = cur[1] + dy[i];
if(nx < 0 || ny < 0 || nx >= n || ny >= m) continue;
if(maps[nx][ny] == 0) continue;
if(visited[nx][ny] == 0 || visited[nx][ny] > visited[cur[0]][cur[1]] + 1){
que.add(new int []{nx, ny});
visited[nx][ny] = visited[cur[0]][cur[1]] + 1;
}
}
}
return visited[n-1][m-1];
}
}