🖥️ CS/Baekjoon Algorithms

#11729번 하노이 탑 이동순서 (c++)

한국의 메타몽 2020. 2. 25. 01:05
#include <iostream>
using namespace std;

int hanoi(int num){
    int total = 0;
    
    if(num==1){
        total++;
    }
    else{
        total+=hanoi(num-1);
        total++;
        total+=hanoi(num-1);
    }
    return total;
}

void print_hanoi(int num, int a, int b, int c){
    if(num==1){
        cout << a << " " << c << "\n";
    }
    else{
        print_hanoi(num-1,a,c,b);
        cout << a << " "<< c << "\n";
        print_hanoi(num-1,b,a,c);
    }
}

int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    
    int num = 0;
    cin >> num;
    
    cout << hanoi(num) << "\n";
    print_hanoi(num,1,2,3);
    
    return 0;
}

기존의 하노이 탑 공식을 이용하면 쉽게 풀린다. 

다만, 총 이동 횟수를 먼저 적는 것을 단순 무식하게 함수 하나를 더 세워 풀었는데, 

다 풀고나서 다른 사람들의 풀이법을 구경해보니 '((1 << n)- 1)'로 풀린다는 사실을 발견했다. 

빨리 풀 생각에 더 나아가서 생각하지 못했기에, 더 보기좋고 깔끔한 공식은 생각 못했다.

더 차분하게 풀어보자. 

'🖥️ CS > Baekjoon Algorithms' 카테고리의 다른 글

#2789번 블랙잭 (c++)  (0) 2020.03.01
#1002번 터렛 (c++)  (0) 2020.02.26
#3053번 택시 기하학 (c++)  (0) 2020.02.25
#4153번 직각삼각형 (c++)  (0) 2020.02.24
#1085번 직사각형에서 탈출(c++)  (0) 2020.02.22