백준 11729 - 하노이 탑 이동 순서 (파이썬)
Updated:
Answer
import sys
def hanoi(n, start, end) :
if n == 1 :
print(start, end)
return
hanoi(n - 1, start, 6 - start - end)
print(start, end)
hanoi(n - 1, 6 - start - end, end)
n = int(sys.stdin.readline())
print(2 ** n - 1)
hanoi(n, 1, 3)
Answer2
def hanoi(n, left, middle, right):
try:
return cache[(n, left, right)]
except:
pass
if n == 1:
c = f'{left} {right}'
else:
c = f'{hanoi(n-1, left, right, middle)}\n{left} {right}\n{hanoi(n - 1, middle, left, right)}'
cache[(n, left, right)] = c
return c
cache = {}
n = int(input())
print(2 ** n - 1, hanoi(n, 1, 2, 3), sep='\n')