ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • JUNGOL...91
    일지 2021. 7. 12. 12:09

    Beginner_Coder/재귀/하노이1


    문제                                            

    하노이의 탑에 대한 전설은 아래와 같다.

    고대 인도의 베나레스(현재 베트남의 하노이)​에 있는  한 사원에는 세상의 중심을 나타내는 큰 돔이 있고

    그 안에 세 개의 다이아몬드 기둥이 동판 위에 세워져 있다. 

    기둥 가운데 하나에는 신이 64개의 순금 원판을 끼워 놓았다. 

    가장 큰 원판이 바닥에 놓여 있고, 나머지 원판들이 점점 작아지며 꼭대기까지 쌓여 있다. 

    이것은 신성한 브라흐마의 탑이다. 

    브라흐마의 지시에 따라 승려들은 모든 원판을 다른 기둥으로 옮기기 위해 밤낮 없이 차례로 제단에 올라 규칙에 따라 원판을 하나씩 옮긴다. 

    이 일이 끝날 때, 탑은 무너지고 세상은 종말을 맞이하게 된다.

     

    기둥을 1, 2, 3 번으로 하고, N개의 원판이 작은 것부터 1, 2, 3, 4 … N이라고 할 때, 

    아래의 규칙에 따라 모든 원판을 3번 기둥으로 쌓기 위해 이동한다.


    1. 한 번에 하나의 원판만 옮길 수 있다.

    2. 큰 원판이 작은 원판 위에 있어서는 안 된다.

     

    모든 원판이 1번 기둥에 순서대로 쌓여 있을 때, 

    최소 횟수로 3번 기둥으로 모두 이동하는 과정을 순서대로 출력하는 프로그램을 작성하시오.

     

    JUNGOL 재귀 하노이1

     

    입력 형식                                     

    1번 기둥에 쌓여 있는 원판의 개수 N(1≤N≤15)이 들어온다.

     

    출력 형식                                     

    한 줄에 한 개의 원판을 이동하는 과정을 “원판번호 : 이동전 기둥번호 -> 이동후 기둥번호” 형식으로 모두 출력한다.

     

    입력 예                                        

    3

     

    출력 예                                        

    1 : 1 -> 3
    2 : 1 -> 2
    1 : 3 -> 2
    3 : 1 -> 3
    1 : 2 -> 1
    2 : 2 -> 3
    1 : 1 -> 3


    Hanoi1.h

    #include <iostream>
    
    class Hanoi1 : public Base
    {
    private:
    	void CheckHanoiTower(int n, int from, int by, int to);
    };

     

    Hanoi1.cpp

    void Hanoi1::Code()
    {
    	int n;
    
    	std::cin >> n;
    
    	CheckHanoiTower(n, 1, 2, 3);
    }
    
    void Hanoi1::CheckHanoiTower(int n, int from, int by, int to)
    {
    	if (n <= 0)
    	{
    		return;
    	}
    
    	CheckHanoiTower(n - 1, from, to, by);
    	std::cout << n << " : " << from << " -> " << to << '\n';
    	CheckHanoiTower(n - 1, by, from, to);
    }

     


    실행 결과 Success(100)


     

    NadanKim/CodingTest_JUNGOL: JUNGOL 코딩 테스트를 위한 저장소 (github.com)

     

    NadanKim/CodingTest_JUNGOL

    JUNGOL 코딩 테스트를 위한 저장소. Contribute to NadanKim/CodingTest_JUNGOL development by creating an account on GitHub.

    github.com

     

    댓글

Designed by Tistory.