[http://online-judge.uva.es/p/v102/10254.html 원문보기]
----
인기도:C(A,B,C), 성공률:높음(낮음,보통,높음), 레벨:2(1~4)
=== About [ThePriestMathematician] ===
"하노이의 탑(Tower of Hanoi)" 퍼즐에 관한 고대 신화는 이미 잘 알려져 있다. 최근 밝혀진 전설에 의하면, 브라흐마나 수도사들이 64개의 원반을 한 쪽 침에서 다른 쪽 침으로 옮기는 데 얼마나 오래 걸리는지를 알아내고 나서는 더 빠르게 옮기는 방법을 찾아내자는 결론을 내렸다. 다음 그림은 침이 네 개인 하노이의 탑이다.
[http://online-judge.uva.es/p/v102/p10254b.jpg]
사원에 있는 수도사 중 한 명이 동료 수도사에게 침을 하나만 추가하면 1초에 원반을 하나씩 옮긴다고 할 때 한 나절이면 모든 원반을 옮길 수 있을 것이라고 알려주었다. 그가 제안한 방법은 다음과 같다.
{{|
1. 맨 위에 있는 원반(맨 위에 있는 k개의 원반)을 다른 침으로 옮긴다.
2. 침이 세 개 있는 경우에 쓰는 방법을 그대로 적용해서 나머지 n-k개의 원반(전체 원반의 개수를 n개라고 가정)을 목표 지점으로 옮긴다.
3. 마지막으로 네 개의 침을 이용해서 맨 위에 있던 k개의 원반을 최종 목적지로 옮긴다.
|}}
이동 횟수를 최소화할 수 있는 k값을 계산한 다음 18,433번만 옮기면 된다는 결론을 내렸다. 따라서 침이 세 개만 있을 때는 5천억년이 걸릴 일을 침 하나만 추가하면 5시간 7분 13초만에 할 수 있다는 것을 알아냈다.
그 영리한 수도사가 제안한 네 개의 침을 사용하는 방법으로 원반을 옮기는 횟수를 계산하자. 원반은 한 번에 하나씩만 옮길 수 있으며 큰 원반을 작은 원반 위에 놓을 수는 없다. 이동 횟수를 구하려면 먼저 원반 이동 횟수를 최소화시킬 수 있는 k값을 구해야 한다.
=== Input ===
입력 파일은 여러 줄로 구성된다. 각 줄에는 0 이상 10,000 이하의 정수 N이 들어있으며, 이 값은 옮겨야 할 원반의 개수를 나타낸다. 파일 끝 문자가 들어오면 입력이 종료된다.
=== Output ===
입력된 각 줄에 대해 N개의 원반을 최종 위치로 옮기는 데 필요한 이동 횟수를 출력한다.
=== Sample Input ===
{{| 1
2
28
64 |}}
=== Sample Output ===
{{| 1
3
769
18433 |}}
=== 풀이 ===
|| 작성자 || 사용언어 || 개발시간 || 코드 ||
|| 김상섭 || C++ || . || [ThePriestMathematician/김상섭] ||
|| 문보창 || C++ || 1차(실패), 2차(5시간) || [ThePriestMathematician/문보창] ||
|| 하기웅 || C++ || 2시간 30분 || [ThePriestMathematician/하기웅] ||
=== 쓰레드 ===
----
[문제분류] [경시대회준비반]