코딩테스트

백준 11729 하노이 탑 이동순서 - python

math_tbro 2022. 1. 15. 00:38

 

출처 :

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

 

11729번: 하노이 탑 이동 순서

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

www.acmicpc.net

풀이

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(input())
print(2**n - 1)
hanoi(n,1,3)

1단계 / 2단계/ 3단계 나눠서 생각을 한다.

 

1단계 : 1번에 맨 밑을 꺼내기 위해서는 그 위에 모든 것이 2번에 있어야한다. 

2단계 : 1번 맨 밑을 3번으로 옮긴다.

3단계 : 2번에 있는 것을 3번으로 옮긴다. 

 

이해가 안 갈 것 같아 추가 적으로 설명을 하면

예로 n = 4라고 하자.

그러면 이것의 4번째 를 꺼내기 위해선 2번에 1,2,3이 적재되있어야한다. (1단계) 

4를 3번칸으로 옮겨준다(2단계)

2번에 있는 모든것을 3번으로 옮겨 줘야 한다. 

 

어렵다..