카테고리 없음
[프로그래머스] 하노이의 탑- 파이썬/python
욘아리
2024. 5. 23. 11:59
문제
https://school.programmers.co.kr/learn/courses/30/lessons/12946
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
하노이 탑의 세 개의 기둥과 이 기둥에 꽂을 수 있는 다양한 크기의 원판이 있다. 두 가지 조건을 만족하면서, 한 기둥에 꽂힌 원판들을 다른 기둥으로 옮겨서 다시 쌓는 것이다. 기둥 1번에는 n개의 원판이 있고 이 n개의 원판을 3번 기둥으로 최소 횟수로 옮기는 문제다.
- 한 번에 하나의 원판만 옮길 수 있습니다.
- 큰 원판이 작은 원판 위에 있어서는 안 됩니다.
제한사항
- n은 15 이하의 자연수입니다.
예시
n : 2
result : [[1,2], [1,3], [2,3]]
풀이
문제를 보고 전혀 감이 오지 않아서 유튜브를 참고해서 풀었다.
def hanoi(num, start, temp, end):
if num == 1:
return [[start, end]]
return hanoi(num - 1, start, end, temp) + hanoi(1, start, temp, end) + hanoi(num - 1, temp, start, end)
def solution(n):
return hanoi(n, 1, 2, 3)
- 이동해야 할 원판이 하나(num == 1)라면 단순히 그 원판을 시작 기둥에서 마지막 기둥으로 옮기는 값을 반환한다.
- 그렇지 않을 경우에는 세 단계를 수행하면서 재귀적으로 푼다.
- 'num - 1'개의 원판을 시작 기둥에서 임시 기둥으로 옮긴다.
- 하나의 원판(가장 마지막 원판)을 시작 기둥에서 마지막 기둥으로 옮긴다.
- 'num - 1'개의 원판을 임시 기둥에서 마지막 기둥으로 옮긴다.
참고자료
https://www.youtube.com/watch?v=vq7dpFWpwAE