몰?.루();

백준 9019번 코틀린 본문

프로그래밍/안드로이드, 코틀린

백준 9019번 코틀린

toonraon 2022. 3. 24. 09:25
import java.util.LinkedList

fun main() {
    repeat(readLine()!!.toInt()) {
        val (a, b) = readLine()!!.split(" ").map { it.toInt() }
        fun bfs() {
            val visited = BooleanArray(10000)
            val queue = LinkedList<Pair<Int, String>>()
            queue.add(Pair(a, ""))

            while (queue.isNotEmpty()) {
                val head = queue.poll()
                if (head.first == b) { // 종료 조건
                    println(head.second)
                    return
                }

                if (!visited[head.first.d()]) { queue.add(Pair(head.first.d(), head.second + "D")); visited[head.first.d()] = true }
                if (!visited[head.first.s()]) { queue.add(Pair(head.first.s(), head.second + "S")); visited[head.first.s()] = true }
                if (!visited[head.first.l()]) { queue.add(Pair(head.first.l(), head.second + "L")); visited[head.first.l()] = true }
                if (!visited[head.first.r()]) { queue.add(Pair(head.first.r(), head.second + "R")); visited[head.first.r()] = true }
            }
        }
        bfs()
    }
}

fun Int.d(): Int = this * 2 % 10000
fun Int.s(): Int  = if (this == 0) 9999 else this - 1
fun Int.l(): Int = (this * 10 % 10000) + (this / 1000)
fun Int.r(): Int = (this / 10) + (this % 10 * 1000)

뭔가 복잡한 문제인 척하지만 껍질을 벗겨내보면 사실 단순한 bfs 문제입니다.

Comments