새로운 블로그로 이전 작업을 진행하고 있어 포스트가 새로 작성되고 있지 않습니다.

빠른 시일 내에 새로운 블로그로 인사드리겠습니다.

새로운 블로그 : https://unho.vercel.app/

본문 바로가기
알고리즘 문제풀이/Python

[프로그래머스] 하노이의 탑

by 언호 2021. 12. 27.

📖 문제


🧑🏻‍💻 풀이 과정

1) 문제 이해 및 접근

완전 탐색하여 최소의 값을 구하려 접근

조건이 까다로워 함수 구현이 어려움

 

재귀를 이용하여 접근

2) 알고리즘

  • 재귀

3) 풀이 코드

사용 언어 - Python

def hanoi(n, start, middle, end, answer):       # 원반 개수(높이), 원반이 출발하는 기준 기둥, 중간 기둥, 목적지 기둥, 정답 리스트
    if n == 1:                                  # 현재 원반이 1층 높이(최상단이라 옮겨야 하는 경우)
        answer.append([start, end])             # 현재 기둥에서 목적지 기둥으로 옮김
        return
    
    hanoi(n-1, start, end, middle, answer)      # 지금 보고 있는 기둥에서 위에 원반선택, 목적지는 중간에 거쳐야 하는것으로 변경
    answer.append([start, end])                 # 위에 원반들을 모두 옮겼으니, 다음 원반 이동
    hanoi(n-1, middle, start, end, answer)      # 중간 기둥에 있는 원반을 옮기기 위해 재귀

def solution(n):
    answer = []                     # 원반 이동을 저장하는 리스트

    hanoi(n, 1, 2, 3, answer)       # 하노이 함수

    return answer


print(solution(3))

📝 결과 및 학습한 내용

1) 어려웠던 내용

하노이의 탑 문제를 처음 접하여 재귀를 이용한 풀이로 접근하지 못함

재귀 호출을 알고 난 후에도 어떠한 방식으로 진행하는지 접근이 어려웠음

(1) 참고 사이트

  • 블로그
    세개의 기둥을 이용해서 재귀를 들어갈때마다 파라미터 값인 세개의 기둥을 바꾸어 줌

2) 새롭게 학습한 내용

하노이의 탑을 풀기위한 재귀 호출 방법


🔗 문제 링크

- https://programmers.co.kr/learn/courses/30/lessons/12946

 

코딩테스트 연습 - 하노이의 탑

하노이 탑(Tower of Hanoi)은 퍼즐의 일종입니다. 세 개의 기둥과 이 기동에 꽂을 수 있는 크기가 다양한 원판들이 있고, 퍼즐을 시작하기 전에는 한 기둥에 원판들이 작은 것이 위에 있도록 순서대

programmers.co.kr

 

 

※ 오류 및 오타, 다른 의견이 있는 경우 댓글을 남겨주시면 감사하겠습니다

'알고리즘 문제풀이 > Python' 카테고리의 다른 글

[백준] 1747 소수&팰린드롬  (0) 2021.12.29
[백준] 6497 전력난  (0) 2021.12.28
[백준] 2636 치즈  (0) 2021.12.26
[백준] 2573 빙산  (0) 2021.12.25
[백준] 14503 로봇 청소기  (0) 2021.12.24

댓글