https://school.programmers.co.kr/learn/courses/30/lessons/12946
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
기본 원리
1. 원반이 한 개일 때 (n=1)
시작 지점에서 끝 지점으로 바로 이동 합니다.
2. 원반이 n 개일 때
1) 1번 기둥에 있는 n개 원반 중 n-1 개를 2번 기둥으로 옮깁니다.
2) 1번 기둥에 남아 있는 가장 큰 원반을 3번 기둥으로 옮깁니다.
3) 2번 기둥에 남아 있는 n-1 개의 원반을 3번 기둥으로 옮깁니다.
n개 원반을 옮기려면 n-1개 원반을 옮기는 문제를 해결해야 하므로 전형적인 재귀 호출 알고리즘을 적용해야 합니다.
풀이
def solution(n):
answer = []
def hanoi(n, start, end, via):
if n == 1:
answer.append([start, end])
return
hanoi(n-1, start, via, end)
answer.append([start, end])
hanoi(n-1, via, end, start)
hanoi(n, 1, 3, 2)
return answer
참고
https://shoark7.github.io/programming/algorithm/tower-of-hanoi
'하노이의 탑' 이해하기
'하노이의 탑' 문제를 이해하고 문제 해결을 위한 핵심 통찰을 살핀 뒤 코드로 작성합니다. 이후 탑의 개수에 따른 총 이동 횟수를 구하는 일반항까지 수학적으로 유도합니다.
shoark7.github.io
'Coding Test > 프로그래머스' 카테고리의 다른 글
[Level 1] / [Python] 약수의 합 (0) | 2022.10.12 |
---|---|
[Level 1] / [Python] 짝수와 홀수 (0) | 2022.10.12 |
[Level 2] / [Python] 전력망을 둘로 나누기 (0) | 2022.10.12 |
[Level 2] / [Python] 두 큐 합 같게 만들기 (0) | 2022.10.11 |
[Level 2] / [Python] 가장 큰 사각형 찾기 - DP (Dynamic Programming) (0) | 2022.10.10 |