본문 바로가기

알고리즘

Boj 11729 c++ 하노이의 탑 이동순서

#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;
}

굉장히 유명한 재귀함수 문제.

설명은 그림으로 대체.