PS/BOJ

[C++] 백준 11729번: 하노이 탑 이동 순서 - Recursion

__PS 2022. 7. 3. 16:27
728x90

https://www.acmicpc.net/problem/11729

 

11729번: 하노이 탑 이동 순서

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

www.acmicpc.net

 

하노이 탑에 사용하는 장대를 편의상 1, 2, 3번이라 부르면,

n-1개의 원반을 모두 1번에서 2번으로, 2번에서 3번으로 옮겨야 한다.

그러므로 n-1개의 원반을 1번에서 3번을 거쳐 2번으로, 그 다음에 2번에서 1번을 거쳐 3번으로 가는 경우를 생각하면 된다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <cmath>
using namespace std;
void hanoi(int n, int from, int by, int to){
    if(n==1){
        cout << from << " " << to << "\n";
    }
    else{
        hanoi(n-1, from, to, by);
        cout << from << " " << to << "\n";
        hanoi(n-1, by, from, to);
    }
}
int main(){
    int n;
    cin >> n;
    cout << (int)pow(2, n)-1 << "\n";
    hanoi(n,1,2,3);
}
cs