오늘 문제는 미로에서 가장 가까운 출구를 찾는 문제로 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
}
}
문제에서 주어진 조건만 잘 맞춰내면 쉽게 풀리는 문제였다.