https://school.programmers.co.kr/learn/courses/30/lessons/1844
풀이
import java.util.*;
class Solution {
int[] dx = {1, 0, -1, 0};
int[] dy = {0, 1, 0, -1};
public int solution(int[][] maps) {
int answer = 0;
int[][] visited = new int[maps.length][maps[0].length];
bfs(maps, visited);
answer = visited[maps.length-1][maps[0].length-1];
if(answer == 0){
answer = -1;
}
return answer;
}
public void bfs(int[][] maps, int[][] visited){
int x = 0;
int y = 0;
visited[x][y] = 1;
Queue<int[]> queue = new LinkedList<>();
queue.add(new int[]{x, y});
while(!queue.isEmpty()){
int[] current = queue.remove();
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 > maps.length-1 || nY < 0 || nY > maps[0].length-1)
continue;
if(visited[nX][nY] == 0 && maps[nX][nY] == 1){
visited[nX][nY] = visited[cX][cY] + 1;
queue.add(new int[]{nX, nY});
}
}
}
}
}
DFS로 하면 중복되게 체크하는 것이 너무 많아 모든 지역에 대해 한번 씩만 확인할 수 있게 BFS 방식을 이용하여 해결했다.
'문제 풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 카펫(JAVA) (0) | 2024.05.05 |
---|---|
[프로그래머스] 네트워크(JAVA) (0) | 2024.05.04 |
[프로그래머스] 모의고사(JAVA) (0) | 2024.04.29 |
[프로그래머스] H-Index(JAVA) (1) | 2024.04.28 |
[프로그래머스] 가장 큰 수(JAVA) (0) | 2024.04.28 |