프로그래밍/코딩테스트
[2178번] 미로 탐색 / Swift
turu
2021. 6. 10. 13:44
https://www.acmicpc.net/problem/2178
2178번: 미로 탐색
첫째 줄에 두 정수 N, M(2 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 M개의 정수로 미로가 주어진다. 각각의 수들은 붙어서 입력으로 주어진다.
www.acmicpc.net
BFS를 이용해서 풀었다.
큐를 사용할 때 직접구현해야하나 하다가 그냥 배열로 사용했는데 통과되었다.
import Foundation
func solution() -> Int {
let direction: [(dy: Int, dx: Int)] = [(-1,0),(1,0),(0,-1),(0,1)]
let size = readLine()!.split(separator: " ").map { Int($0)! }
let n = size[0]
let m = size[1]
var board = [[Int]]()
for _ in 0..<n {
board.append(readLine()!.map{ Int(String($0))! })
}
board[0][0] = 1
var queue = [(row: Int, col: Int)]() // row, col
queue.append((0,0))
while !queue.isEmpty {
let element = queue.removeFirst()
for d in direction {
if case let row = element.row + d.dy, case (0..<n) = row,
case let col = element.col + d.dx, case (0..<m) = col {
if board[row][col] == 0 { continue } // 벽일때
if board[row][col] == 1 { // 미방문
board[row][col] = board[element.row][element.col] + 1
queue.append((row, col))
}
}
}
}
return board[n-1][m-1]
}
print(solution())
반응형