하노이의 탑은 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 지점을 이용하여 옮겨준다.
}
}
}
공부하기 위해 함수 순서를 그려 정리해보려 했는데 대락적으로 아래와 같다. (아직도 헷깔려서 더 깔끔한 정리는 다음에...)