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

+ Recent posts