경험의 기록

문제 : www.acmicpc.net/problem/11729

 

11729번: 하노이 탑 이동 순서

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

www.acmicpc.net

 

 

풀이

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
// 11729 하노이 탑 이동 순서
#include <iostream>
using namespace std;
 
// n개의 원반을 from 에서 by를 거쳐 to로 옮긴다.
void hanoi(int n, int from, int by, int to) {
    if (n == 1)
        printf("%d %d\n", from, to);
    else {
        hanoi(n - 1, from, to, by);    // N-1개의 원반을 기둥3을 거쳐 2로 옮긴다.
        printf("%d %d\n", from, to); // 기둥 1에서 1개의 원반을 기둥 3으로 옮긴다.
        hanoi(n - 1, by, from, to);    // 기둥 2에서 N-1개의 원반을 기둥 3으로 옮긴다.
    }
}
 
void hanoiNum(int n)
{
    int num = 1;
    while (--n) {
        num = num * 2 + 1;
    }
    printf("%d\n", num); 
}
int main() {
    int n;
    cin >> n;
    hanoiNum(n);
    hanoi(n,1,2,3);
 
}
cs
반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading