반응형
1. 문제
세 개의 장대가 있고 첫 번째 장대에는 반경이 서로 다른 n개의 원판이 쌓여 있다. 각 원판은 반경이 큰 순서대로 쌓여있다. 이제 수도승들이 다음 규칙에 따라 첫 번째 장대에서 세 번째 장대로 옮기려 한다.
- 한 번에 한 개의 원판만을 다른 탑으로 옮길 수 있다.
- 쌓아 놓은 원판은 항상 위의 것이 아래의 것보다 작아야 한다.
이 작업을 수행하는데 필요한 이동 순서를 출력하는 프로그램을 작성하라. 단, 이동 횟수는 최소가 되어야 한다.
아래 그림은 원판이 5개인 경우의 예시이다.
2. 코드
def move(N, start, to):
print(start, to)
def hanoi(N, start, to, via):
if N == 1:
move(1, start, to)
else:
hanoi(N-1, start, via, to)
move(N, start, to)
hanoi(N-1, via, to, start)
n = int(input())
print(2**n-1)
hanoi(n, 1, 3, 2)
728x90
반응형
'백준' 카테고리의 다른 글
[백준] 2609번 - 최대공약수와 최소공배수 (feat. 파이썬으로 최대공약수, 최소공배수 구하기) (0) | 2021.11.12 |
---|---|
[백준] 1436번 - 영화감독 숌 (0) | 2021.11.12 |
[백준] 1002번 - 터렛 (파이썬) (feat. 원) (0) | 2021.11.08 |
[백준] 3053번 - 택시 기하학 (0) | 2021.11.08 |
[백준] 9029번 - 골드바흐의 추측 (0) | 2021.11.08 |