반응형
문제
세 개의 장대가 있고 첫 번째 장대에는 반경이 서로 다른 n개의 원판이 쌓여 있다. 각 원판은 반경이 큰 순서대로 쌓여있다. 이제 수도승들이 다음 규칙에 따라 첫 번째 장대에서 세 번째 장대로 옮기려 한다.
- 한 번에 한 개의 원판만을 다른 탑으로 옮길 수 있다.
- 쌓아 놓은 원판은 항상 위의 것이 아래의 것보다 작아야 한다.
이 작업을 수행하는데 필요한 이동 순서를 출력하는 프로그램을 작성하라. 단, 이동 횟수는 최소가 되어야 한다.
아래 그림은 원판이 5개인 경우의 예시이다.

입력
11729번: 하노이 탑 이동 순서
세 개의 장대가 있고 첫 번째 장대에는 반경이 서로 다른 n개의 원판이 쌓여 있다. 각 원판은 반경이 큰 순서대로 쌓여있다. 이제 수도승들이 다음 규칙에 따라 첫 번째 장대에서 세 번째 장대로
www.acmicpc.net
import sys
n=int(sys.stdin.readline())
def hanoi(num,start,mid,end):
if(num==1):
print(start,end)
else:
hanoi(num-1,start,end,mid)
print(start,end)
hanoi(num-1,mid,start,end)
print(2**n-1)
hanoi(n,1,2,3)
※ 재귀

● 옮겨야 할 원판이 1개면 1번에서 3번으로 1번만 옮겨주면 되므로 따로 처리 해준다.
하노이 탑 문제는 크게 3단계로 봐야 한다.
하노이 탑 3단계
1. 맨 밑 원판을 제외한 n-1 개의 원판을 1에서 3을 거친 뒤 2로 옮긴다.
2. 맨 밑 원판을 1에서 3으로 옮긴다.
3. 2에 있는 n-1개의 원판을 1을 거쳐 3으로 옮긴다.
● 이를 재귀식으로 나타내면 답이 도출된다!!


반응형
'백준(baekjoon) > 실버' 카테고리의 다른 글
백준(baekjoon) 2751번: 수 정렬하기 2 (실버 5, 파이썬 PYTHON) - 정렬 (0) | 2022.09.04 |
---|---|
백준(baekjoon) 1018번: 체스판 다시 칠하기(실버 4, 파이썬 PYTHON) - 브루트 포스 (0) | 2022.09.03 |
백준(baekjoon) 9020번: 골드바흐의 추측(실버 2, 파이썬 PYTHON) - 기본 수학2 (0) | 2022.09.01 |
백준(baekjoon) 1929번: 소수 구하기(실버 3, 파이썬 PYTHON) - 기본 수학2 (0) | 2022.09.01 |
백준(baekjoon) 1978번: 소수 찾기(실버 5, 파이썬 PYTHON) - 기본 수학2 (0) | 2022.09.01 |