Haribo ML, AI, MATH, Algorithm

하노이의 탑

2021-01-29
Haribo

def solution(n, first = 1, second = 2, third = 3):
    return solution(n-1, first, third, second) + [[first, third]] + solution(n-1, second, first, third) if n else []

하노이의 탑

하노이의 탑은 워낙 유명한 수학 문제라 부가설명은 하지 않겠다. 하노이의 탑 함수를 정의할 것인데

각각의 기둥의 명칭을 first, second, third로 정의할 것이다.

soludion(n, first, second, third) : first에 있는 n개의 원판을 second를 거쳐 third로 옮긴다

soludion(n, second, first, third) : second에 있는 n개의 원판을 first를 거쳐 third로 옮긴다

라는 뜻의 함수를 꼭 기억하자. 실제 내부에서 함수가 어떻게 동작하는지는 알필요가없다. 그렇다면 대략적인 하노이의탑 움직임을 보자.





first에 있는 n-1개의 원판을 third를 거쳐 second로 옮긴다.

first에 남은 가장 큰 원판하나를 third로 옮긴다.

second에 옮겨두었던 n-1개의 원판들을 first 를 거쳐 third로 옮긴다.

이렇게 함수의 의미만 이용해 알아서 코딩이 되도록 짜주면 된다.

def solution(n, first = 1, second = 2, third = 3):
    return solution(n-1, first, third, second) + [[first, third]] + solution(n-1, second, first, third) if n else []

Similar Posts

이전 포스트 최고의 집합

다음 포스트 N-Queen

Comments