Post

[백준/코틀린] 1697번: 숨바꼭질

실버 1

링크

1697번: 숨바꼭질

풀이

세 가지 연산(-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.