<알고리즘 문제풀이&연습>/[C,C++] Hackerrank

[CodeGround] 하노이 타워(Hanoi Tower)

사용자 BlockDMask 2017. 8. 7. 23:00
반응형
  • 안녕하세요. BlockDMask 입니다.

  • 오늘은 codeground 두번째 문제 '하노이 타워'를 풀어보았습니다.

0. 제목

  • 코드그라운드 하노이 타워

  • CodeGround Hanoi tower

1. 문제설명

  • 세개의 타워가 있고

  • 첫번째 타워에 서로 다른 접시 N개가 쌓여있습니다. 

  • 첫번째 타워에 놓여있는 모든 접시를 세번째 타워로 옮기고자 할때, 

  • 접시를 옮기는 순서를 출력하라.

  • 접시는 한 번에 하나만 옮길 수 있고, 한 타워의 맨 위 접시를 다른 타워의 맨 꼭대기에 올릴 수 있다.

  • 큰접시 위에 작은접시가 올라가야만 한다.
    (작은 접시위에 큰접시 올라오는것 불가능)

2. 풀이과정

  • 알고리즘 수업을 들었던 사람은 

  • 재귀 함수 파트에서 꼭 한번은 배웠던 하노이 타워(Hanoi Tower) 문제입니다.

  • 유명한 만큼 설명은 생략하겠습니다.


3. 코드


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <iostream>
 
using namespace std;
 
 
void hanoi(int ring, int from, int by, int to){
    if(ring ==1){
        cout << from << " -> " << to << endl;
    }else{
        hanoi(ring-1, from, to, by);
        cout << from << " -> " << to << endl;
        hanoi(ring-1, by, from, to);
    }
    return ;    
}
 
 
int main(int argc, char** argv)
{
    int T, test_case;
    cin >> T;
    
    int ring, from, by, to;
    
    for(test_case = 0; test_case  < T; test_case++)
    {
        cin >> ring;
        
        cout << "Case #" << test_case+1 << endl;
        hanoi(ring, 123);
    }
 
    return 0;
}
cs


4. 인증



사이트 경로 : home>practice>하노이 타워

https://www.codeground.org/practice/practiceProblemView

문제 출처 : 충북대학교 프로그래밍 경진대회

감사합니다.

반응형