[문제]
https://school.programmers.co.kr/learn/courses/30/lessons/1844
[풀이]
대표적인 BFS 기본 문제.
[코드]
import java.util.*;
class Solution {
int n, m;
boolean[][] visited;
int ans = Integer.MAX_VALUE;
int[] dr = {0, 0, -1, 1};
int[] dc = {-1, 1, 0, 0};
public int solution(int[][] maps) {
int answer = 0;
//캐릭터가 상대 팀 진영에 도착하기 위해서 지나가야 하는 칸의 개수의 최솟값을 return
n = maps.length;
m = maps[0].length;
visited = new boolean[n][m];
bfs(maps);
if(ans==Integer.MAX_VALUE){
return -1;
}
else return ans;
}
public void bfs(int[][] maps){
Queue<Point> q = new LinkedList<>();
q.add(new Point(0, 0, 1));
visited[0][0] = true;
while(!q.isEmpty()){
Point p = q.poll();
if(p.r==n-1 && p.c==m-1){
ans = Math.min(ans, p.dist);
}
for(int i=0; i<4; i++){
int nr = p.r + dr[i];
int nc = p.c + dc[i];
if(nr<0 || nc<0 || nr>=n || nc>=m) continue;
if(maps[nr][nc]==0 || visited[nr][nc]) continue;
visited[nr][nc] = true;
q.add(new Point(nr, nc, p.dist+1));
}
}
}
static class Point{
int r, c;
int dist;
Point(int r, int c, int dist){
this.r = r;
this.c = c;
this.dist = dist;
}
}
}
'알고리즘 공부 및 문제 풀이 > 프로그래머스(PRO)' 카테고리의 다른 글
[pro] 프로그래머스 level4 43236 징검다리 (Java) - 이분탐색 (0) | 2023.02.06 |
---|---|
[pro] 프로그래머스 level3 43238 입국심사 (Java) - 이분탐색 (0) | 2023.02.06 |
[pro] 프로그래머스 level2 43165 타겟 넘버 (Java) - DFS (0) | 2023.02.05 |
[pro] 프로그래머스 level4 42897 도둑질 (Java) - dp (0) | 2023.02.05 |
[pro] 프로그래머스 level3 42627 디스크 컨트롤러 (Java) - 힙(우선순위 큐) (0) | 2023.02.03 |