도구스학업·수학

하노이 탑 계산기

원판 수를 넣으면 최소 이동 횟수 2ⁿ−1과 걸리는 시간, 실제 수순까지 냅니다. 기둥을 4개 이상으로 늘렸을 때의 프레임-스튜어트 수도 함께 보여 줍니다.

회/초

최소 이동 횟수

31번

2^5 − 1입니다. 약 31번이고, 1초에 1번씩 쉬지 않고 옮기면 31초이 걸립니다.

걸리는 시간31초
가장 작은 원판이 움직이는 횟수16
가장 큰 원판이 움직이는 횟수1
원판을 하나 더 놓으면63

기둥을 더 놓으면 (프레임-스튜어트)

기둥 수이동 횟수걸리는 시간
3 · 원래 문제3131초
41313초
51111초
699초

수순 — A 기둥에서 C 기둥으로 전체 31수

  1. 11 AC
  2. 22 AB
  3. 31 CB
  4. 43 AC
  5. 51 BA
  6. 62 BC
  7. 71 AC
  8. 84 AB
  9. 91 CB
  10. 102 CA
  11. 111 BA
  12. 123 CB
  13. 131 AC
  14. 142 AB
  15. 151 CB
  16. 165 AC
  17. 171 BA
  18. 182 BC
  19. 191 AC
  20. 203 BA
  21. 211 CB
  22. 222 CA
  23. 231 BA
  24. 244 BC
  25. 251 AC
  26. 262 AB
  27. 271 CB
  28. 283 AC
  29. 291 BA
  30. 302 BC
  31. 311 AC
계산 근거 — n−1개를 옆 기둥으로 치우고, 가장 큰 것을 옮기고, 다시 얹습니다.T(n) = 2·T(n−1) + 1, T(1) = 1 → T(n) = 2ⁿ − 1T(5) = 2^5 − 1 = 31이보다 적게 옮길 방법이 없다는 것도 증명되어 있습니다. 가장 큰 원판을 옮기려면 그 위의 n−1개가 어딘가 한 기둥에 모두 모여 있어야 하기 때문입니다.
원판이 하나 늘 때마다 시간이 두 배가 됩니다. 지금 5개에서 31초인데, 하나만 더 놓으면 1분이 됩니다. 전설대로 64개라면 1초에 한 번씩 쉬지 않고 옮겨도 약 5,846억년, 우주 나이 138억 년의 마흔두 배가 걸립니다. 2ⁿ이 얼마나 빨리 커지는지 몸으로 느끼게 하려고 교재마다 이 문제를 싣습니다.
기둥을 하나만 더 놓아도 판이 완전히 달라집니다. 원판 5개가 기둥 3개에서는 31번이지만 기둥 4개에서는 13번입니다. 64개라면 5,846억 년이 다섯 시간으로 줄어듭니다. 다만 기둥이 4개 이상일 때의 값은 프레임-스튜어트 알고리즘이 주는 상계일 뿐, 그것이 최소라는 일반 증명은 아직 없습니다. 작은 원판 수에서는 전수 확인으로 최적임이 알려져 있습니다.
손으로 풀 때의 요령 — k번째에 옮기는 원판은 k를 2진수로 썼을 때 뒤에 붙은 0의 개수에 1을 더한 번호입니다. 홀수 번째마다 늘 가장 작은 원판이 움직인다는 뜻이라, 가장 작은 원판을 한 방향으로 계속 돌리고 그 사이사이에 가능한 유일한 수를 두면 자동으로 최단 수순이 됩니다. 원판 수가 홀수면 작은 원판을 A→C→B→A 방향으로, 짝수면 A→B→C→A 방향으로 돌립니다.

계산 방법

  1. 1원판 수를 넣습니다. 전설의 64개를 보려면 프리셋을 누릅니다.
  2. 21초에 몇 번 옮길지를 정하면 걸리는 시간이 함께 나옵니다.
  3. 3원판이 12개 이하면 아래에 실제 수순이 나오니 그대로 따라 옮기면 됩니다.

자주 묻는 질문

원판이 n개면 2ⁿ − 1번입니다. 3개면 7번, 5개면 31번, 10개면 1,023번, 20개면 1,048,575번입니다. n−1개를 옆 기둥으로 치우고, 가장 큰 것을 한 번 옮기고, 다시 얹는 구조라 T(n) = 2·T(n−1) + 1이 되고 이것을 풀면 2ⁿ − 1이 나옵니다. 이보다 적게 옮길 방법이 없다는 것도 증명되어 있습니다.

1초에 한 번씩 쉬지 않고 옮겨도 약 5,846억 년이 걸립니다. 이동 횟수가 2⁶⁴ − 1 = 18,446,744,073,709,551,615번이기 때문입니다. 우주 나이 138억 년의 마흔두 배쯤 되는 시간입니다. 흔히 5,845억 년으로 인용되는데, 그레고리력 평균년(31,556,952초)으로 정확히 나누면 584,554,049,254년입니다.

엄청나게 줄어듭니다. 원판 64개가 기둥 3개에서는 1,844경 번이지만 기둥 4개에서는 18,433번뿐입니다. 5,846억 년이 다섯 시간으로 바뀌는 셈입니다. 이 값은 프레임-스튜어트 알고리즘으로 구하며, f(n,p) = min(2·f(k,p) + f(n−k,p−1))을 따릅니다. 다만 이것이 최소라는 일반 증명은 아직 없고, 작은 원판 수에서 전수 확인으로만 최적임이 알려져 있습니다.

가장 작은 원판을 한 방향으로 계속 돌리고, 그 사이사이에 가능한 유일한 수를 두면 됩니다. 원판 수가 홀수면 작은 원판을 A→C→B→A 방향으로, 짝수면 A→B→C→A 방향으로 옮깁니다. 홀수 번째 이동은 항상 가장 작은 원판 차례이고, 짝수 번째에는 작은 원판을 건드리지 않는 수가 하나뿐이라 고민할 것이 없습니다.

알 수 있습니다. k를 2진수로 썼을 때 뒤에 붙은 0의 개수에 1을 더한 번호입니다(1번이 가장 작은 원판). 예를 들어 8번째 이동은 8 = 1000₂이라 0이 셋 붙었으니 4번 원판입니다. 홀수 k는 0이 하나도 없으므로 늘 1번 원판이 되고, 이것이 홀수 번째마다 작은 원판이 움직이는 이유입니다.

i번 원판은 2^(n−i)번 움직입니다(1번이 가장 작은 원판). 가장 작은 원판이 2^(n−1)번으로 전체의 절반을 차지하고, 가장 큰 원판은 딱 한 번만 움직입니다. 모두 더하면 2⁰ + 2¹ + … + 2^(n−1) = 2ⁿ − 1로 전체 횟수와 정확히 맞습니다.

알아두면 좋은 점

  • 기둥이 4개 이상일 때의 값은 프레임-스튜어트 알고리즘이 주는 상계입니다. 최적이라고 강하게 믿어지지만 일반 증명은 아직 없습니다.
  • 수순은 원판 12개(4,095수)까지만 만들며, 화면에는 앞 200수만 보여 줍니다.
  • 이동 횟수는 2⁵³을 넘으면 일반 숫자로 정확히 담을 수 없어 큰정수(BigInt)로 계산합니다.
  • 연 단위 환산은 그레고리력 평균년 31,556,952초를 씁니다.

함께 보면 좋은 도구

마지막 검증: 2026년 8월 31일 · 결과는 참고용 추정치입니다.