[프로그래머스] 게임 맵 최단거리(Java)

수경·2023년 4월 17일
0

problem solving

목록 보기
136/174

프로그래머스 - 게임 맵 최단거리

풀이

  • 동서남북 bfs
  • 최단거리
    -> 현재 위치가 1이면(처음 방문한 경우) 이전 위치 +1 저장
    -> 1이 아니면(다른 경로로 이동한 경우) min(현재 위치, 이전 위치 +1) 저장

코드

import java.util.*;

class Solution {
    public int solution(int[][] maps) {
        int col = maps.length;
        int row = maps[0].length;
        boolean[][] visited = new boolean[col][row];
        int[] dx = new int[]{-1, 1, 0, 0};
        int[] dy = new int[]{0, 0, -1, 1};
        List<int[]> queue = new ArrayList<>();

        queue.add(new int[]{0, 0});
        visited[0][0] = true;
        while (!queue.isEmpty()) {
            int[] pos = queue.remove(0);
            int x = pos[0];
            int y = pos[1];

            for (int i = 0; i < 4; i++) {
                int nx = x + dx[i];
                int ny = y + dy[i];

                if (nx >= 0 && nx < row && ny >= 0 && ny < col && maps[ny][nx] == 1 && !visited[ny][nx]) {
                    visited[ny][nx] = true;
                    queue.add(new int[]{nx, ny});
                    maps[ny][nx] = maps[ny][nx] == 1 ? maps[y][x] + 1 : Math.min(maps[ny][nx], maps[y][x] + 1);
                    if (nx == row - 1 && ny == col - 1) break;
                }
            }
        }

        return maps[col - 1][row - 1] == 1 ? -1 : maps[col - 1][row - 1];
    }
}
profile
어쩌다보니 tmi뿐인 블로그😎

0개의 댓글