#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;
int sum=0;
vector<pair<int,int>> ans;
void Hanoi(int s, int e ,int n){
if(n == 0) return;
else{
Hanoi(s, 6-s-e, n-1);
sum++;
ans.push_back({s,e});
Hanoi(6-s-e, e, n-1);
return;
}
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int K;
cin >> K;
Hanoi(1, 3, K);
cout << sum << '\n';
for(int i=0;i<ans.size();i++) cout << ans[i].first << ' ' << ans[i].second <<'\n';
return 0;
}
- 핵심 :하노이의 탑 풀이에 필요한 과정을 찾기
1) 가장 큰 원반 n을 제외한 n-1개의 원판을 나머지 기둥(2기둥)으로 이동
2) 원판 n을 3기둥으로 이동
3) 원판 n-1개를 2기둥에서 3기둥으로 이동
- key point!
: 원판을 옮기는 과정을 재귀로 풀어낼 때 움직이는 기둥의 정보
도 함께 필요!