Daily LeetCode Challenge - 1926. Nearest Exit from Entrance in Maze

Min Young Kim·2022년 11월 21일
0

algorithm

목록 보기
32/198

오늘 문제는 미로에서 가장 가까운 출구를 찾는 문제로 entrance 가 주어졌을때 가장 가까운 출구로 나가기 위한 step 을 반환하는 문제였다.

BFS 로 풀면 되는 문제로 벽을 만나면 queue 에서 빼주고 벽이 아닌 경우에만 queue 에 넣는 식으로 구현하였다.

그리고 출구는 index 가 0 이거나 size -1 과 같아지면 출구에 도달했다고 취급하였다.

class Solution {
    fun nearestExit(maze: Array<CharArray>, entrance: IntArray): Int {
        
        val queue : Queue<Pair<Array<Int>, Int>> = LinkedList()
        val visited = Array(maze.size){ BooleanArray(maze[0].size){false} }
        
        queue.add(Pair(entrance.toList().toTypedArray(), 0))
        
        while(queue.isNotEmpty()) {
            
            val movePair = queue.poll()
            val x = movePair.first[0]
            val y = movePair.first[1]
            val step = movePair.second
            
            if(x < 0 || x >= maze.size || y < 0 || y >= maze[0].size) continue
            if(maze[x][y] == '+') continue
            
            if(!(x == entrance[0] && y == entrance[1]) && (x == 0 || x == maze.size - 1 || y == 0 || y == maze[0].size - 1)) return step
            if(!visited[x][y]) {
                
                visited[x][y] = true
                
                queue.add(Pair(arrayOf(x+1, y), step + 1))
                queue.add(Pair(arrayOf(x-1, y), step + 1))
                queue.add(Pair(arrayOf(x, y+1), step + 1))
                queue.add(Pair(arrayOf(x, y-1), step + 1))
                
            }
             
        }
        
        return -1
        
    }
}

문제에서 주어진 조건만 잘 맞춰내면 쉽게 풀리는 문제였다.

profile
길을 찾는 개발자

0개의 댓글