백준

[BOJ/python] 11729번 하노이 탑 이동 순서

LUNAV 2022. 6. 19. 22:47

https://www.acmicpc.net/problem/11729

 

11729번: 하노이 탑 이동 순서

세 개의 장대가 있고 첫 번째 장대에는 반경이 서로 다른 n개의 원판이 쌓여 있다. 각 원판은 반경이 큰 순서대로 쌓여있다. 이제 수도승들이 다음 규칙에 따라 첫 번째 장대에서 세 번째 장대로

www.acmicpc.net

 

문제 해석

장대는 3개이며, 원판의 개수 N을 입력받는다.

첫 번째 줄에 옮길 때의 최소 횟수 K를, 두 번째 줄 부터 수행과정을 출력한다.


코드

 

def move(n, a, b, c):
    if n == 0:
        return
    move(n-1, a, c, b)
    print(a, b)
    move(n-1, c, b, a)

n = int(input())

print(2**n - 1)
move(n, 1, 3, 2)

문제 풀이

재귀함수의 문제 유형 중 하나인 하노이의 탑 문제이다.

 

원판의 개수에 따른 최소 이동 횟수를 a_n 이라고 하자.
원판의 개수가 1인 경우 1번이면 되므로 a_1 = 1이다.


원판의 개수가 n인 경우:

n-1개를 2로 옮기고 n번째 원판을 3으로 옮긴 다음 n-1개를 3으로 옮기므로, a_n = 2a_(n-1) + 1,

(a_n + 1) = 2(a_(n-1) + 1) 이므로 b_n = a_n + 1 이라 하면 b_n = 2 b_2 이며, b_1 = 2 이므로
b_n = 2**n 이며, a_n = b_n - 1 이므로 a_n = 2**n - 1이 성립한다.

'백준' 카테고리의 다른 글

[BOJ/pypy] 25603번 짱해커 이동식  (0) 2022.09.21
[BOJ/python] 15829번 Hashing  (0) 2022.06.19
[BOJ/python] 25186번 INFP 두람  (0) 2022.06.06
[BOJ/python] 10162번 전자레인지  (0) 2022.05.16
[BOJ/python] 23972번 악마의 제안  (0) 2022.03.27