Swift) 백준 16928번 뱀과 사다리 게임 - G5

https://www.acmicpc.net/problem/16928

 

16928번: 뱀과 사다리 게임

첫째 줄에 게임판에 있는 사다리의 수 N(1 ≤ N ≤ 15)과 뱀의 수 M(1 ≤ M ≤ 15)이 주어진다. 둘째 줄부터 N개의 줄에는 사다리의 정보를 의미하는 x, y (x < y)가 주어진다. x번 칸에 도착하면, y번 칸으

www.acmicpc.net

문제 풀이: bfs를 이용하여 방문한 위치를 체크. 지도를 초기화 할때, 뱀이 있다면 이동해야 하는 위치를 값으로 넣어주고 그 외의 칸은 0으로 처리. 이동하는 위치가 0이 아닌 값이라면 해당 값의 위치로 이동 및 방문 처리하는 방식으로 문제를 풀었다.

import Foundation

var map: [Int] = Array(repeating: 0, count: 101)
var visited: [Bool] = Array(repeating: false, count: 101)

let input = readLine()!.split(separator: " ").map{ Int($0)! }

for i in 0..<input[0] {
    let ladder = readLine()!.split(separator: " ").map{ Int($0)! }
    map[ladder[0]] = ladder[1]
}

for i in 0..<input[1] {
    let snake = readLine()!.split(separator: " ").map{ Int($0)! }
    map[snake[0]] = snake[1]
}

struct Horse {
    let location: Int
    let count: Int
}

func solution() {
    var queue: [Horse] = [.init(location: 1, count: 0)]
    while !queue.isEmpty {
        let popHorse = queue.removeFirst()
        for i in 1...6 {
            var nextCoor = popHorse.location+i
            if nextCoor >= 100 {
                print(popHorse.count+1)
                return
            }
            if map[nextCoor] != 0 {
                nextCoor = map[nextCoor]
            }
            if !visited[nextCoor] {
                queue.append(.init(location: nextCoor, count: popHorse.count+1))
                visited[nextCoor] = true
            }
        }
    }
}

solution()