[백준/코틀린] 1697번: 숨바꼭질
실버 1
링크
풀이
세 가지 연산(-1, +1, *2)을 이용해 그래프를 탐색합니다.
최단 거리를 구해야 하므로 BFS를 사용합니다.
코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
val queue = ArrayDeque<Pair<Int, Int>>()
val visited = BooleanArray(100001)
val mul = listOf(1, 1, 2)
val add = listOf(-1, 1, 0)
fun bfs(k: Int, sp: Int) {
visited[sp] = true
queue.addLast(sp to 0)
while (queue.isNotEmpty()) {
val (cp, cd) = queue.removeFirst()
if (cp == k) return println(cd)
repeat(3) {
val np = mul[it] * cp + add[it]
if (np in 0..100000 && !visited[np]) {
visited[np] = true
queue.addLast(np to cd + 1)
}
}
}
}
fun main() {
val (n, k) = readln().split(" ").map { it.toInt() }
bfs(k, n)
}
This post is licensed under CC BY 4.0 by the author.