코딩일지/python 백준 알고리즘

python 백준 알고리즘 11729번: 하노이 탑 이동 순서

야언 2022. 9. 19. 18:22

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

 

11729번: 하노이 탑 이동 순서

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

www.acmicpc.net

 

** 참고자료 하노이의 탑 알고리즘

https://www.youtube.com/watch?v=FYCGV6F1NuY&t=378s 

 

 

n개의 원판이 있을때, 맨 밑의 원판을 제외한 나머지 n - 1개의 원판들을

 

시작기둥에서 보조기둥으로 옮긴 뒤(1단계), 맨 밑의 원판을 목표기둥으로 옮긴다(2단계).

 

그리고 n - 1개의 원판들을 다시 보조기둥에서 목표기둥으로 옮긴다(3단계).

 

 

내 제출

n = int(input())
def hanoi(n, a, b, c):  # 원반개수, 시작, 목표, 보조
    if n == 1:  # 탈출경로
        print(a, c)  # 시작 -> 목표
    else:
        hanoi(n - 1, a, c, b)  # 원반-1, 시작, 보조, 목표 1단계
        print(a, c)  # 시작 -> 목표 2단계
        hanoi(n - 1, b, a, c)  # 원반-1, 보조, 목표, 시작 3단계
sum = 1
for i in range(n - 1):
    sum = sum * 2 + 1  # 옮긴 횟수 = 2n+1
print(sum)  
hanoi(n, 1, 2, 3)