출처 :
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번으로 옮겨 줘야 한다.
어렵다..
'코딩테스트' 카테고리의 다른 글
백준 1018 체스판 다시 칠하기 (0) | 2022.01.15 |
---|---|
백준 7568 덩치 - python (0) | 2022.01.15 |
[프로그래머스] 실패율 - python (0) | 2022.01.14 |
[프로그래머스] 같은 숫자는 싫어 (0) | 2022.01.13 |
[프로그래머스] 제일 작은 수 제거하기 - python (0) | 2022.01.13 |