백준 11729 하노이 탑 이동 순서 문제.

 

* 1, 2, 3번 기둥이 있다고 하면 각각의 기둥은 6 - a - b 의 관계를 가짐.

 

#include <bits/stdc++.h>
using namespace std;

/*
    hanoi의 탑.
    1(a)번 기둥이 있고 2(b)번 기둥이 있으면 나머지 하나의 기둥은 (6-a-b)번 기둥임.
    n이 애초에 1인 경우를 생각해보면 a에서 b로 하나만 옮기면 됨.
    
    n이 1이 아닌 경우, n개의 기둥에서 n-1개 기둥을 6-a-b로 옮기면 됨.
    그리고 n 번째 원판을 a에서 b(목적지)로 옮김.
    
    그리고 다시 n-1 개 원판을 6-a-b에서 b번 기둥으로 옮기면 끝.
*/

int N;

void hanoi (int a, int b, int n) {
    if (n == 1) {
        cout << a << ' ' << b << '\n';
        return ;
    }
    hanoi (a, 6-a-b, n-1);
    cout << a << ' ' << b << '\n';
    hanoi (6-a-b, b, n-1);
}

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    
    cin >> N;
    cout << (1 << N) - 1 << '\n'; // 비트 연산자. 1을 n만큼 옮김. 이러면 2의 n승이 됨.
    hanoi(1, 3, N);
}

 

'Algorithm' 카테고리의 다른 글

BOJ 15694 c++  (0) 2020.07.13
BOJ 1074 c++  (0) 2020.07.13
BOJ 1629 곱셈 c++  (0) 2020.07.11
BOJ 1697 숨바꼭질 c++  (0) 2020.07.10
BOJ 4179 불! c++  (0) 2020.07.10
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기
// custom