1 분 소요

[Silver I] 숨바꼭질 - 1697

문제 링크

성능 요약

메모리: 31888 KB, 시간: 184 ms

분류

너비 우선 탐색, 그래프 이론, 그래프 탐색

제출 일자

2025년 4월 21일 08:58:41

문제 설명

수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 때 걷는다면 1초 후에 X-1 또는 X+1로 이동하게 된다. 순간이동을 하는 경우에는 1초 후에 2*X의 위치로 이동하게 된다.

수빈이와 동생의 위치가 주어졌을 때, 수빈이가 동생을 찾을 수 있는 가장 빠른 시간이 몇 초 후인지 구하는 프로그램을 작성하시오.

입력

첫 번째 줄에 수빈이가 있는 위치 N과 동생이 있는 위치 K가 주어진다. N과 K는 정수이다.

출력

수빈이가 동생을 찾는 가장 빠른 시간을 출력한다.

import java.util.*

fun main() {
    val (n, k) = readln().split(" ").map { it.toInt() }
    val position = IntArray(100_001) { -1 }
    val queue: Queue<Int> = ArrayDeque()

    queue.add(n)
    position[n] = 0

    while (queue.isNotEmpty()) {
        val current = queue.poll()
        if (current == k) {
            println(position[current])
            break
        }

        for (next in arrayOf(current + 1, current -1, current * 2)) {
            if (next in 0 until 100_001 && position[next] == -1) {
                position[next] = position[current] + 1
                queue.add(next)
            }
        }
    }
}

카테고리:

업데이트: