티스토리 뷰

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

 

11729번: 하노이 탑 이동 순서

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

www.acmicpc.net

solve 함수는 재귀 함수이다. 원반이 하나라면 그냥 옮기면 끝이기 때문에 종료조건으로 설정한다.

from_pos, to_pos, aux_pos 각각을 시작점, 도착점, 보조점이라고 생각한다.

 

즉, solve(N, 1, 3, 2) 는 N개의 원판을 1번 기둥을 시작으로 3번 기둥으로 옮기되 2번 기둥을 보조기둥으로 사용한다는 뜻이다.

 

하노이의 탑 문제에서 가장 중요한 것은 가장 큰 원반을 도착점에 둔 후, 나머지를 도착점에 옮기면 된다는 것이다. 이때 보조점을 사용한다. 

# 하노이 탑 이동 순서
import sys
input = sys.stdin.readline

N = int(input())

def solve(N, from_pos, to_pos, aux_pos):
    if N == 1:
        print(from_pos, to_pos)
        return
    solve(N-1, from_pos, aux_pos, to_pos)
    print(from_pos, to_pos)
    solve(N-1, aux_pos, to_pos, from_pos)
    
print(2**N-1)
solve(N, 1, 3, 2)

 

'PS > BOJ Python' 카테고리의 다른 글

10819번 - 차이를 최대로  (2) 2023.10.10
1068번 - 트리  (0) 2023.10.06
14719번 - 빗물  (0) 2023.07.21
1715번 - 카드 정렬하기  (0) 2023.07.17
17298번 - 오큰수  (0) 2023.07.14
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함