Algorithm/백준
Swift) 백준 16928번 뱀과 사다리 게임 - G5
콩벌레 개발자
2024. 3. 19. 18:18
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()