def hanoi(n, start, end, aux):
if n == 1:
print(start, end)
return
# n-1개의 원판을 aux 장대로 이동
hanoi(n-1, start, aux, end)
# 가장 큰 원판을 목적지로 이동
print(start, end)
# n-1개의 원판을 aux 장대에서 목적지로 이동
hanoi(n-1, aux, end, start)
N = int(input())
# 옮긴 횟수는 2^N - 1
print(2**N - 1)
hanoi(N, 1, 3, 2)
하노이 탑 문제는 재귀적 사고를 이해하고 적용하는 데 아주 좋은 예제다. 이 문제에서는 n개의 원판을 첫 번째 장대에서 세 번째 장대로 옮기는 과정을 최소 횟수로 수행해야 한다.
이때 두 가지 규칙을 따라야 한다:
하노이 탑 문제를 해결하는 핵심 아이디어는 크게 세 단계로 나눌 수 있다:
이 과정을 재귀적으로 수행하며, 원판의 개수가 1개일 때까지 반복한다. 원판이 1개인 경우는 간단히 해당 원판을 목적지 장대로 옮기면 된다.