https://www.acmicpc.net/problem/1697
문제 풀이
bfs로 최단 경로를 탐색하는 방식으로 풀이. 각 점마다 +1, -1, *2씩 해주므로 한번 방문한 점은 다시 방문할 필요가 없으므로 방문처리를 하여 문제를 해결.
import Foundation
struct Node {
let count: Int
let location: Int
}
let nk = readLine()!.split(separator: " ").map{ Int($0)! }
var visited = Array(repeating: false, count: 100001)
func solution() {
var queue: [Node] = [.init(count: 0, location: nk[0])]
if nk[0] == nk[1] {
print(0)
return
}
while !queue.isEmpty {
let popNode = queue.removeFirst()
for i in [-1, 1, popNode.location] {
let nx = popNode.location+i
if nx >= 0 && nx <= 100000 && !visited[nx] {
if nx == nk[1] {
print(popNode.count+1)
return
} else {
visited[nx] = true
queue.append(.init(count: popNode.count+1, location: nx))
}
}
}
}
}
solution()
'Algorithm > 백준' 카테고리의 다른 글
Swift) 백준 2579번 계단 오르기 - S3 (0) | 2024.05.26 |
---|---|
Swift) 백준 2805번 나무 자르기 - S2 (0) | 2024.05.26 |
Swift) 백준 1005번 ACM Craft - G3 (0) | 2024.04.13 |
Swift) 백준 17609번 회문 - G5 (1) | 2024.03.25 |
Swift) 백준 3055번 탈출 - G4 (0) | 2024.03.20 |