https://www.acmicpc.net/problem/11729
풀이 아이디어
재귀적인 방법을 사용하여 하노이 탑 문제를 해결합니다. 첫 번째 장대에 있는 원판들을 세 번째 장대로 옮기는 과정에서 아래의 과정을 반복한다.
- n-1개의 원판을 두 번째 장대로 옮긴다.
- 가장 큰 원판을 첫 번째 장대에서 세 번째 장대로 옮긴다.
- 두 번째 장대에 있는 n-1개의 원판을 세 번째 장대로 옮긴다.
초기 상태의 가장 큰 원판을 목표하는 곳(세 번째 장대)으로 옮기고나면, 다시 두 번째 장대의 n-1개의 원판을 첫 번째 장대로 옮겨서 n-1번째로 큰 원판을 세 번째로 옮긴다.
풀이👀
- 재귀 함수 hanoi_tower를 정의한다. 이 함수는 매개변수로 원판의 개수 n, 출발지 기둥 frm, 보조 기둥 tmp, 목표 기둥 to를 받는다.
- 만약 n이 1이면, 즉 옮겨야 할 원판이 하나라면 해당 원판을 출발지 기둥에서 목표 기둥으로 옮긴다.
- 그렇지 않은 경우에는 다음과 같이 수행한다.
- hanoi_tower(n-1, frm, to, tmp): 가장 큰 원판을 제외한 나머지 원판들을 보조 기둥으로 옮긴다.
- print(frm, to): 원판의 움직임을 출력한다. (출발지, 도착지)
- hanoi_tower(n-1, tmp, frm, to): 보조 기둥에 있는 원판들을 목표 기둥으로 옮긴다.
- 이동 횟수는 2의 거듭제곱에서 1을 뺀 값과 같으므로 2**N - 1을 출력합니다.
코드🐱👓
def hanoi_tower(n, frm, tmp, to):
if n == 1:
print(frm, to)
else:
hanoi_tower(n-1, frm, to, tmp)
print(frm, to)
hanoi_tower(n-1, tmp, frm, to)
N = int(input())
print(2**N - 1)
hanoi_tower(N, '1', '2', '3')
'문제 풀이 > 백준' 카테고리의 다른 글
[S3] 백준 1463 - 1로 만들기(Python) (0) | 2024.09.05 |
---|---|
[G4] 백준 12970 - AB (Python3) (0) | 2024.05.04 |
[S1] 백준 2156 - 포도주 시식 (Python3) (0) | 2024.04.28 |
[S1] 백준 1149 - RGB거리 (Python3) (0) | 2024.04.28 |
[S1] 백준 1932 - 정수 삼각형 (Python3) (0) | 2024.04.27 |
댓글