11729번: 하노이 탑 이동 순서 (acmicpc.net)
def hanoi(n, frm, to, aux) -> int:
if n == 1:
print(f'{frm} {to}')
return 1
hanoi(n - 1, frm, aux, to)
print(f'{frm} {to}')
hanoi(n - 1, aux, to, frm)
K = int(input())
# K = 20
print(2 ** K - 1)
hanoi(K, 1, 3, 2)
재귀는 큰 문제를 분할해서 처리하는 특성 상 작은 문제를 해결하면 큰 문제도 해결된다. 수학적 귀납법처럼 k = 1, 2인 경우만 해결하면 자동으로 처리가 된다.
그를 위해서는 움직이는 방법을 재연할 수 있어야 한다. 일단 k = 1인 경우를 보자. 간단히 from -> to로 옮기면 된다

k = 2인 경우를 보자

k=1, 2에 대한 내용이 코드로 들어가있다. 이것은 다른 정수에도 적용이 된다.
'코드' 카테고리의 다른 글
Non-Divisible Subset (0) | 2021.10.25 |
---|---|
2110번: 공유기 설치 (acmicpc.net) (0) | 2021.09.14 |
터렛 (0) | 2021.08.03 |
연역 가이드 (0) | 2021.05.22 |
GPUView를 위한 log.cmd가 실행되지 않을 때 (0) | 2021.05.13 |