C# 하노이의 탑

김민구·2024년 11월 2일
0

C#

목록 보기
4/31
post-thumbnail

하노이의 탑은 3개 기둥에서 좌측(하단에서 부터 큰 순에서 작은순으로 쌓여 시작)에서 시작해서 우측 끝(시작과 같은 모양)으로 만드는 퍼즐로 3개의 규칙이 있다.

  • 한 번에 한개의 원판만 옮길 수 있다.
  • 가장 위에 있는 원판만 이동할 수 있다.
  • 큰 원판이 작은 원판 위에 있어서는 안 된다.

3개의 원판이 있을때의 기준으로 이동 순서를 정리

C# 코드로 구현하면 아래와 같다.

internal class Program
{
    static void Main(string[] args)
    {
        Hanoi(3, 'A', 'B', 'C');   //n은 고리의 개수 A는 시작지점 , B는 이용지점, C는 도착지점이다. 
    }

    private static void Hanoi(int n, char tower1, char tower2, char tower3)
    {
        if (n == 1)  // 1일 경우 움직일 고리가 한개만 남는 경우 이므로 tower1 에서 tower3로 가주기만 하면 된다.
        {
            Console.WriteLine("원판 1을 {0} -> {1}", tower1, tower3);
        }
        else
        {
            Hanoi(n - 1, tower1, tower3, tower2);   // A에서 B까지 n-1개를 tower3지점을 이용하여 옮겨준다
            Console.WriteLine("원판 {0}을 {1} -> {2}", n, tower1, tower3); // A 에서 C까지 가장 큰 고리 한 개를 옮겨준다.
            Hanoi(n - 1, tower2, tower1, tower3);  // B에서 C까지 n-1개를 tower1 지점을 이용하여 옮겨준다.
        }
    }
}

공부하기 위해 함수 순서를 그려 정리해보려 했는데 대락적으로 아래와 같다. (아직도 헷깔려서 더 깔끔한 정리는 다음에...)

profile
C#, Unity

0개의 댓글