코딩테스트

[leetcode] 1926. Nearest Exit from Entrance in Maze

nayoon 2024. 5. 26. 17:18

링크

import java.util.*;

class Solution {
    public int nearestExit(char[][] maze, int[] entrance) {
        int result = -1;
        Queue<Route> queue = new LinkedList<>();

        int m = maze.length;
        int n = maze[0].length;

        int[][] visited = new int[m][n];
        for(int i = 0; i < m; i++) {
            for(int j = 0; j < n; j++) {
                visited[i][j] = Integer.MAX_VALUE;
            }
        }

        queue.add(new Route(0, entrance[0], entrance[1]));
        visited[entrance[0]][entrance[1]] = 0;
        while(!queue.isEmpty()) {
            Route r = queue.poll();
            
            if (!(r.x == entrance[0] && r.y == entrance[1]) && (r.x == 0 || r.y == 0 || r.x == m - 1 || r.y == n - 1)) {
                result = r.route;
                break;
            }

            if (r.x + 1 < m && maze[r.x + 1][r.y] == '.' && visited[r.x + 1][r.y] > r.route + 1) {
                visited[r.x + 1][r.y] = r.route + 1;
                queue.add(new Route(r.route + 1, r.x + 1, r.y));
            }
            if (r.x - 1 > -1 && maze[r.x - 1][r.y] == '.' && visited[r.x - 1][r.y] > r.route + 1) {
                visited[r.x - 1][r.y] = r.route + 1;
                queue.add(new Route(r.route + 1, r.x - 1, r.y));
            }
            if (r.y + 1 < n && maze[r.x][r.y + 1] == '.' && visited[r.x][r.y + 1] > r.route + 1) {
                visited[r.x][r.y + 1] = r.route + 1;
                queue.add(new Route(r.route + 1, r.x, r.y + 1));
            }
            if (r.y - 1 > -1 && maze[r.x][r.y - 1] == '.' && visited[r.x][r.y - 1] > r.route + 1) {
                visited[r.x][r.y - 1] = r.route + 1;
                queue.add(new Route(r.route + 1, r.x, r.y - 1));
            }
        }

        return result;
    }
    class Route {
        public int route;
        public int x;
        public int y;

        public Route(int route, int x, int y) {
            this.route = route;
            this.x = x;
            this.y = y;
        }
        public String toString() {
            return "route: " + route + ", x: " + x + ", y: " + y;
        }
    }
}