반응형
https://school.programmers.co.kr/learn/courses/30/lessons/1844
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
Idea
BFS는 가장 처음 찾은 답이 최단 거리를 보장하므로 아래와 같은 코드로 작성했다.
Code
import java.util.*;
class Solution {
public int solution(int[][] maps) {
int n = maps.length;
int m = maps[0].length;
return bfs(maps, n, m);
}
private int bfs(int[][] maps, int n, int m) {
int[] dx = {0, 0, -1, 1};
int[] dy = {-1, 1, 0, 0};
boolean[][] visited = new boolean[n][m];
Queue<int[]> q = new LinkedList<>();
q.offer(new int[]{0, 0});
visited[0][0] = true;
maps[0][0] = 1;
while(!q.isEmpty()) {
int[] current = q.poll();
int cx = current[0];
int cy = current[1];
for (int i = 0; i < 4; i++) {
int nx = cx + dx[i];
int ny = cy + dy[i];
if (nx >= 0 && nx < n && ny >= 0 && ny < m && maps[nx][ny] == 1 && !visited[nx][ny]) {
visited[nx][ny] = true;
q.offer(new int[]{nx, ny});
maps[nx][ny] = maps[cx][cy] + 1;
}
}
if (cx == n - 1 && cy == m - 1) {
return maps[cx][cy];
// 목표 지점인 (n - 1, m - 1)에 도달했을 때 그 위치는 최단 거리롤 탐색했을 때 도달한 위치이다.
// bfs에서는 처음 도달한 위치가 최단거리로 보장되므로 maps[cx][cy]는 목표 지점까지의 최단 거리를 의미하게 된다.
}
}
return -1;
}
}반응형
'Dev > Programmers' 카테고리의 다른 글
| [프로그래머스] 2018 KAKAO BLIND RECRUITMENT [1차] 다트 게임 (Java) (0) | 2024.12.17 |
|---|---|
| [프로그래머스] 단어 변환 (Java) (0) | 2024.12.17 |
| [프로그래머스] 네트워크 (Java) (1) | 2024.12.17 |
| [프로그래머스] 타겟 넘버 (Java) (0) | 2024.12.17 |
| [프로그래머스] H-Index (Java) (2) | 2024.12.16 |