Problem
Problem URL : 하노이 탑 이동 순서
[1] Answer Code (18. 09. 14)
#include<iostream>
using namespace std;
// n is cnt
// f is from
// t is to
void hanoi(int n, int f, int t){
if( n != 0 ){
/*
원반이 1,2,3 이라면
1 + 2 + 3 = 6이고
f : 1
t : 3이라면
1번 원판에 가장 아래를 제외하고
나머지 원판들은 2(= 6-1-3 )로 가야한다.
*/
hanoi(n-1, f, 6-f-t );
printf("%d %d\n",f,t);
hanoi(n-1, 6-f-t, t);
}
}
int main(){
int n;
cin >> n;
cout << (1<<n)-1 << endl;
hanoi(n, 1, 3);
return 0;
}
Review
- 하노이 탑 공식을 이해하고 푸니까 큰 문제 없이 풀었다.