코드
def hanoi(disk, start, mid, end):
if disk == 1:
print(start, end)
else:
hanoi(disk - 1, start, end, mid)
print(start, end)
hanoi(disk - 1, mid, start, end)
total_disk = int(input())
total_mvmt = 0
for disk in range(total_disk):
total_mvmt = total_mvmt * 2
total_mvmt += 1
print(total_mvmt)
hanoi(total_disk, 1, 2, 3)
풀이
하노이탑 옮기기의 원리이다
5개의 탑을 3번으로 옮기려면
일단 4개를 중간으로 옮겨놓고
5번을 3번으로 옮긴다음
중간에 있던 4개를 3번으로 옮기면 된다.
그럼 4개를 옮기는 법은 똑같이
3개를 다른데 옮겨놓고 4번을 3번에 옮겨놓고 3개를 그 위에 얹으면 된다
그렇게 계속 하나씩 줄여가면서 옮기면 된다.
그리고 총 몇 번 움직였는지는 이 공식으로 출력하면 된다.
3개 원반을 1번에서 3번으로 옮기려면 2개 원반을 2번 막대로 옮기고 ,
3번 원반을 3번 막대에 옮기고 , 2개 원반을 3번막대에 옮겨야한다.
2개의 원반을 2번 옮겨야하고 3번 원반을 1번 옮긴다.
그래서 저 공식이 나왔다.
728x90
'알고리즘 > 백준 문제풀이' 카테고리의 다른 글
[백준] 10828 스택 파이썬 풀이 (스택) (0) | 2021.06.21 |
---|---|
[백준] 11651 좌표 정렬하기 2 파이썬 풀이 (정렬) (0) | 2021.06.21 |
[백준] 2805 나무자르기 파이썬 풀이 (이분탐색) (0) | 2021.06.20 |
[백준] 1929 소수 구하기 파이썬 풀이 (기본수학2) (1) | 2021.06.20 |
[백준] 10250 ACM호텔 파이썬 풀이 (기본 수학1) (0) | 2021.06.20 |