문제 소개
https://www.acmicpc.net/problem/13913
DFS를 하기에는 너무많은 경우의 수가 있으니 BFS로 풀어야 한다고 생각했다.
문제 풀이
숫자에 _를 붙여서 하면 더 가독성이 좋았다. visited를 활용하여 이전 값을 저장했다.
let nk = readLine()!.split(separator: " ").map { Int($0)! }
let (n, k) = (nk[0], nk[1])
var visited = Array(repeating: -1, count: 100_001)
var queue = [(n, 0)]
var index = 0
visited[n] = 0
while queue.count > index {
let current = queue[index].0
let time = queue[index].1
if current == k {
print(time)
break
}
for i in [-1, 1, current] {
let next = current + i
if 0...100_000 ~= next && visited[next] == -1 {
visited[next] = current
queue.append((next, time + 1))
}
}
index += 1
}
var route: [Int] = []
var num = k
while num != n {
route.append(num)
num = visited[num]
}
route.append(n)
print(route.reversed().map { String($0) }.joined(separator: " "))
'→ Problems' 카테고리의 다른 글
[Algoritm] 백준 - 13549번 숨바꼭질3 (Swift) (0) | 2024.05.23 |
---|---|
[Algorithm] 백준 - 14226번 이모티콘 (Swift) (0) | 2024.05.22 |
[Algorithm] 백준 - 2146번 다리 만들기 (Swift) (0) | 2024.05.20 |
[Algorithm] 백준 - 16964번 DFS 스페셜 저지 (Swift) (0) | 2024.05.14 |
[Algorithm] 백준 - 16940번 BFS 스페셜 저지 (Swift) (0) | 2024.05.14 |