https://programmers.co.kr/learn/courses/30/lessons/1844
코딩테스트 연습 - 게임 맵 최단거리
[[1,0,1,1,1],[1,0,1,0,1],[1,0,1,1,1],[1,1,1,0,1],[0,0,0,0,1]] 11 [[1,0,1,1,1],[1,0,1,0,1],[1,0,1,1,1],[1,1,1,0,0],[0,0,0,0,1]] -1
programmers.co.kr
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Queue;
class Solution {
public int solution(int[][] maps) {
int n = maps.length;
int m = maps[0].length;
int[][] visited = new int[n][m];
int INF = Integer.MAX_VALUE;
// visited 큰 값으로 초기화
for (int i = 0; i < n; i++) {
Arrays.fill(visited[i], INF);
}
int[] dr = { 0, 0, -1, 1 };
int[] dc = { 1, -1, 0, 0 };
Queue<int[]> q = new LinkedList<>();
q.offer(new int[] { 0, 0 });
visited[0][0] = 1;
int[] curr;
int r, c, nr, nc;
while (!q.isEmpty()) {
curr = q.poll();
r = curr[0];
c = curr[1];
for (int dir = 0; dir < 4; dir++) {
nr = r + dr[dir];
nc = c + dc[dir];
// 경계 내에 있고 아직 갱신되지 않았고 1이면
if ((nr >= 0 && nr < n && nc >= 0 && nc < m) && (visited[nr][nc] == INF)
&& (maps[nr][nc] == 1)) {
if (visited[nr][nc] > visited[r][c] + 1) {
visited[nr][nc] = visited[r][c] + 1;
q.offer(new int[] { nr, nc });
}
}
}
}
return visited[n - 1][m - 1] != INF ? visited[n - 1][m - 1] : -1;
}
}
'programmers > Java' 카테고리의 다른 글
[programmers] 체육복 / Java (0) | 2021.08.18 |
---|---|
[programmers] 키패드 누르기 / Java (0) | 2021.08.18 |