Page 178 - Do it! 자료구조와 함께 배우는 알고리즘(C 언어, 3쇄)
P. 178

05-3  하노이의 탑









                   여기에서는 쌓아 놓은 원반을 최소의 횟수로 옮기기 위한 알고리즘인 ‘하노이의 탑’에 대해
                   살펴보겠습니다.




                   하노이의 탑
                   하노이의 탑(Towers of Hanoi)은 작은 원반이 위에, 큰 원반이 아래에 위치할 수 있도록 원반

                   을 3개의 기둥 사이에서 옮기는 문제입니다. 모든 원반은 크기가 다르고 처음에는 모든 원반
                   이 이 규칙에 맞게 첫 번째 기둥에 쌓여 있습니다. 이 상태에서 모든 원반을 세 번째 기둥으로
                   최소의 횟수로 옮기면 됩니다. 원반은 1개씩만 옮길 수 있고 큰 원반을 작은 원반 위에 쌓을
                   수 없습니다.

                      하노이의 탑이라는 알고리즘 이름은 ‘64개의 황금 원반을 3개의 기둥 사이에서 바꿔 옮기는 작업을 완료하면 세계의 종
                   말이 찾아온다.’라는 고대 인도의 신화에서 유래했습니다.


                   그림 5-8은 원반이 3개일 때의 모든 과정을 나타낸 것입니다. 차례대로 살펴보면 하노이 탑
                   의 모든 과정을 충분히 이해할 수 있습니다.


                      1
                      2
                     3                                원반 1을 첫 번째 기둥에서 세 번째 기둥으로

                      2
                     3                       1        원반 2를 첫 번째 기둥에서 두 번째 기둥으로

                     3           2           1        원반 1을 세 번째 기둥에서 두 번째 기둥으로

                                  1
                     3           2                    원반 3을 첫 번째 기둥에서 세 번째 기둥으로
                                  1
                                 2          3         원반 1을 두 번째 기둥에서 첫 번째 기둥으로


                      1          2          3         원반 2를 두 번째 기둥에서 세 번째 기둥으로

                                            2
                      1                     3         원반 1을 첫 번째 기둥에서 세 번째 기둥으로
                                             1
                                            2
                                            3
                   첫 번째 기둥     두 번째 기둥    세 번째 기둥
                                       [그림 5-8] 하노이의 탑(원반 3개)
                   178   C 알고리즘
   173   174   175   176   177   178   179   180   181   182   183