
즉, 디스크의 수가 n개일 때,
- step 1: move n-1 disk "from" --> "by" (재귀)
- step 2: move last disk "from" --> "to"
- step 3: move last disk "from" --> "to" (재귀)
import kotlin.math.pow
fun main() {
val n = readln().toInt()
println((2.0.pow(n) - 1).toInt())
hanoi(n, 1, 2, 3)
}
fun hanoi(n: Int, from: Int, by: Int, to: Int):Unit = when(n) {
1 -> println("$from $to")
else -> {
hanoi(n-1, from, to, by)
println("$from $to")
hanoi(n-1, by, from, to)
}
}
import kotlin.math.pow
fun main() {
val n = readln().toInt()
println((2.0.pow(n) - 1).toInt())
println(hanoi(n, 1, 2, 3))
}
fun hanoi(n: Int, from: Int, by: Int, to: Int):StringBuilder = when(n) {
1 -> StringBuilder().append(from).append(' ').append(to).append('\n')
else -> {
hanoi(n-1, from, to, by)
.append(from).append(' ').append(to).append('\n')
.append(hanoi(n-1, by, from, to))
}
}