재귀를 이용한 문제 풀이, 원판이 몇 개 있든
1번 기둥에서 2번 기둥으로 n-1개를 올려놓고, 1번 기둥에서 3번으로 n번 원판을 올린 후 2번 기둥에서 3번 기둥으로 n-1개의 원판을 올려놓는다.
//백준 1074, Z
#include <iostream>
#include <vector>
#include <queue>
void solve(int a, int b, int n){
if(n==1){
std::cout << a << ' ' << b << '\n';
return;
}
solve(a, 6-a-b, n-1); //1번 기둥에서 2번 기둥으로 n-1개 옮김
std::cout << a << ' ' << b << '\n';
solve(6-a-b, b, n-1); //2번 기둥에서 3번 기둥으로 n개 옮김
}
int main(){
int N;
std::cin >> N;
std::cout << (1<<N) - 1 << '\n';
solve(1, 3, N);
return 0;
}