Algorithm/BOJ

[BOJ] 2178 미로탐색

삼쓰_웅쓰 2021. 10. 9. 13:03
반응형

출처: https://www.acmicpc.net/problem/2178

분류: BFS

 


 

접근

시작점부터 목적지까지 최단 경로를 찾는 전형적인 BFS 문제였습니다. 

 

풀이

방법은 다양하겠으나 저는 거리를 담아두는 distanceMap 이차원 배열을 하나 만들어서 풀었습니다.

import Foundation

let rc = readLine()!.split(separator: " ").map { Int($0)! }
var map = [[Int]]()

for _ in 0..<rc[0] {
    let row = Array(readLine()!).map { Int(String($0))! }
    map.append(row)
}

var distanceMap = [[Int]](repeating: [Int](repeating: 0, count: rc[1]), count: rc[0])

typealias Point = (r: Int, c: Int)
var delta = [(0, 1), (0, -1), (1, 0), (-1, 0)]
var queue: [Point] = [(0, 0)]
distanceMap[0][0] = 1

while !queue.isEmpty {
    let (r, c) = queue.removeFirst()
    
    if r == rc[0]-1, c == rc[1]-1 {
        break
    }
    
    for (dr, dc) in delta {
        let nr = r + dr
        let nc = c + dc
        guard nr >= 0, nc >= 0, nr < rc[0], nc < rc[1],
              distanceMap[nr][nc] == 0, map[nr][nc] == 1
        else { continue }
        
        distanceMap[nr][nc] = distanceMap[r][c] + 1
        queue.append((nr, nc))
    }
}

print(distanceMap[rc[0]-1][rc[1]-1])

 

배운점

 

실력이 퇴보했나... 풀이 자체에 큰 차이는 없으나 예전엔 입력받은 배열을 그대로 사용했고 이번엔 거리를 측정하는 배열을 하나 더 만들어서 풀었다는 차이 정도로 보인다

반응형