프로그래밍/코딩테스트

[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())
반응형