본문 바로가기
알고리즘/그래프 탐색

백준 1697번 - 숨바꼭질

by 의탕 2020. 11. 5.

 

고민을 좀 한 뒤 BFS로 접근하였다

import java.io.BufferedReader
import java.io.InputStreamReader
import java.util.*

val map = Array(100001) { 0 }

fun main() = with(BufferedReader(InputStreamReader(System.`in`))) {
    //수빈이와 동생의 위치 받기
    var (M, K) = readLine().split(" ").map { it.toInt() }

    bfs(M,K)
    println(map[K])
}

fun bfs(start_: Int, end_: Int) {
    var start = start_
    var end = end_
    var queue = LinkedList<Int>()
    
    queue.offer(start)

    while (!queue.isEmpty()) {
        start = queue.poll()
        if (start == end) break //수빈이와, 동생의 위치가 같으면 종료
        if (start - 1 >= 0 && map[start - 1] == 0) { //뒤로 걸을때
            queue.offer(start - 1)
            map[start - 1] = map[start] + 1
        }
        if (start + 1 <= 100000 && map[start + 1] == 0) { //앞으로 걸을때
            queue.offer(start + 1)
            map[start + 1] = map[start] + 1
        }
        if (start * 2 <= 100000 && map[start *2 ] == 0) { //순간이동 할때
            queue.offer(start * 2)
            map[start *2] = map[start] + 1
        }
    }
}

네이버 블로그에서 티스토리로 넘어왔다.

그동안 나 자신을 너무 놓고있었지만

초심을 바로잡고 제대로 꾸준히 해야겠다.

댓글