Home 백준 - 11729 하노이 탑 이동 순서 풀이
Post
Cancel

백준 - 11729 하노이 탑 이동 순서 풀이

문제

11729 하노이 탑 이동 순서

screencaptures

풀이

개념

하노이 탑 이동 순서 풀이

요약

즉, 디스크의 수가 n개일 때,

  • step 1: move n-1 disk “from” –> “by” (재귀)
  • step 2: move last disk “from” –> “to”
  • step 3: move last disk “from” –> “to” (재귀)

1. kotlin code: timeout 발생 버전

  • 출력 line이 많아 매번 출력을 하면 io 때문에 시간이 길어진다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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)
    }
}

2. kotlin code: 최종

  • StringBuilder 타입 변수에 output값을 담아두고 한 번에 출력한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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))
    }
}

Attachments

This post is licensed under CC BY 4.0 by the author.

백준 - 1018 체스판 다시 칠하기

백준 - 2447 별 찍기 - 10