09-03. BFS(너비 우선 탐색)
0. 문제 유형
최단 경로 탐색
1. 게임 맵 최단거리
프로그래머스 Lv.2 / 체감 난이도 Lv.2
대표적인 최단경로 탐색 문제
import java.util.*;
class Solution {
int[] dx = {1, 0, -1, 0}; // 행 이동
int[] dy = {0, 1, 0, -1}; // 열 이동
class Point {
int x, y, distance;
Point(int x, int y, int distance) {
this.x = x;
this.y = y;
this.distance = distance;
}
}
public int solution(int[][] maps) {
int n = maps.length;
int m = maps[0].length;
boolean[][] visited = new boolean[n][m];
Deque<Point> deq = new ArrayDeque<>();
deq.offerLast(new Point(0, 0, 1));
visited[0][0] = true;
while (!deq.isEmpty()) {
Point current = deq.pollFirst();
// 도착지점에 도달한 경우
if (current.x == n-1 && current.y == m-1) {
return current.distance;
}
// 4방향 탐색
for (int i = 0; i < 4; i++) {
int nx = current.x + dx[i];
int ny = current.y + dy[i];
// 맵 범위 내이고, 벽이 아니고, 방문하지 않은 경우
if (nx >= 0 && nx < n && ny >= 0 && ny < m
&& maps[nx][ny] == 1 && !visited[nx][ny]) {
visited[nx][ny] = true;
deq.offerLast(new Point(nx, ny, current.distance + 1));
}
}
}
return -1;
}
}2. 아이템 줍기
프로그래머스 Lv.3 / 체감 난이도 Lv.4
최단거리 문제인데, 경로를 새로 만들어줘야함
경로가 아닌 부분도 볼 수 있어서 크기를 2배로 늘리기
3. 퍼즐 조각 채우기
프로그래머스 Lv.3 / 체감 난이도 Lv.5
어려움
4. [카카오 인턴] 경주로 건설
프로그래머스 Lv.3 / 체감 난이도 Lv.5
단순히 최단 거리가 아니라 최소 비용을 찾아야 한다.
하지만, 직진과 코너가 비용이 다르다
직진 : 100원
코너 : 600원(직진 비용 추가)
따라서 한 지점에 도착했을 때, 그게 직진으로 온 값인지, 코너에서 온 값인지 알아야한다.(방향)
5. 부대복귀
프로그래머스 Lv.3 / 체감 난이도 Lv.3
destination에서 시작하는 최단 거리 구하는 문제
Last updated