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 []