알고리즘

파이썬 / BOJ / 1914번 (하노이 탑)

snowfield 2021. 7. 9. 14:03

문제

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

 

1914번: 하노이 탑

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

www.acmicpc.net

내가 푼 답

최근에 스터디에서 재귀로 발표를 했는데, 재귀 문제 아직 감이 안 잡힌다..ㅠ 재귀 푸는 연습을 위해서 하노이의 탑 문제 풀었다.

 

재귀 문제를 풀기 위해서 팁

1. 작은 거로 쪼개는 연습을 해 볼 것. →이를 바탕으로 프로그래밍이 가능하게 구체적으로 정의하기
2. 무한 루프를 나갈 장치를 만들어주기

 

저기 "n <= 20" 이 조건 안해주면.. 출력 초과난다..

출력 조건을 간과하고 있었다..!

 

import sys

def mov(start,to):
    print(start,to,sep=' ')
    
def hanoi(n, start, to, via):
    if n == 1 :
        mov(n,start,to)
    else:
        hanoi(n-1,start,via,to)
        mov(start,to)
        hanoi(n-1,via,to,start)

n = int(sys.stdin.readline())
print(2**n-1)

if n <= 20:
    hanoi(n,1,3,2)