백준 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')

Categories:

Updated: