#include<iostream>
using namespace std;
void hanoi(int n, int start, int goal,int sub){ //옮겨야 하는 개수, 사작 축, 최종 축, 보조축
if(n==1){
cout<<start<<" "<<goal<<"\n";
return;//보조축의 필요 없이 한번에 이동하면 되므로
}
hanoi(n-1, start, sub, goal); //목표지점에 도달하기 위해서 보조축에 옮기기
cout<<start<<" "<<goal<<"\n";//마지막 가장 아래 원판 옮기기
hanoi(n-1, sub, goal, start);
}
int main(){
ios_base :: sync_with_stdio(false);
cout.tie(NULL);
int n, ans;
cin>>n;
ans=(1<<n)-1;
cout<<ans<<"\n";
hanoi(n, 1, 3, 2);//1에서 3으로 가기 위해 2를 보조축으로 사용함
return 0;
}
굉장히 유명한 재귀함수 문제.
설명은 그림으로 대체.


'알고리즘' 카테고리의 다른 글
| Boj 1697 c++ 숨바꼭질 (백준 복귀) (0) | 2025.07.06 |
|---|---|
| Boj 23250 c++ 하노이 탑 K (0) | 2025.06.16 |
| Boj 2579 c++계단오르기 (0) | 2025.06.16 |
| Boj 2468 c++ 안전 영역 (1) | 2025.06.04 |
| Boj 1012 c++ 유기농 배추(feat: 연결 요소의 개수) (0) | 2025.06.03 |