하노이탑 (hanoi)

To Do

  • 재귀를 사용한 하노이 탑 문제풀이

Problem

Problem URL : 하노이 탑 이동 순서


Code

// 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 %dn",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;
}

Reivew

  • 직접 손으로 해보면 금방 이해가 된다.