Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- dfs
- 그래프이론
- 알고리즘_스터디
- 이코테
- 그리디
- 프로그래머스
- 알고리즘스터디
- 백준
- 정렬
- 최단경로
- 개인회고
- 기술면접
- ODQA
- 이진탐색
- Level2_PStage
- 다시보기
- 파이썬 3
- 부스트캠프_AITech_3기
- 구현
- Level2
- 단계별문제풀이
- 백트랙킹
- 부스트캠프_AITech3기
- U_stage
- dp
- Level1
- 주간회고
- 글또
- python3
- mrc
Archives
- Today
- Total
국문과 유목민
(Week2)[재귀] 하노이의 탑 본문
주간 코딩스터디 때 푼 문제들을 정리하고 있습니다. 구체적인 문제에 대한 정보는 게시글 내 링크를 살펴봐주세요
소요시간: 15분 (풀었던 문제)
1. 문제 설명
https://programmers.co.kr/learn/courses/30/lessons/12946
코딩테스트 연습 - 하노이의 탑
하노이 탑(Tower of Hanoi)은 퍼즐의 일종입니다. 세 개의 기둥과 이 기동에 꽂을 수 있는 크기가 다양한 원판들이 있고, 퍼즐을 시작하기 전에는 한 기둥에 원판들이 작은 것이 위에 있도록 순서대
programmers.co.kr
하노이의 탑 N번을 수행할 때, 얼마나 움직여야하는 지 구하는 문제
2. 접근 방식
- 전형적인 재귀 문제라고 생각한다.
- Start, Goal, Assist의 역할을하는 기둥이 n이 바뀔 때마다
- 재귀이다보니 이해가 직관적으로 안 돼서 보통 공식을 외워서 문제를 풀었었다. [hanoi (1, 3, 2) , (a, c, b), (c, b, a)]
- 스터디를 진행하면서 제일 밑에 있는 n번째 기둥을 먼저 Goal 기둥에 옮겨놓고 시작한다고 생각하니 이해가 쉬웠다.
3. 코드
def solution(n):
answer = []
def hanoi(n, a, b, c): # (n, start, goal, assist)
if n == 1:
answer.append([a, b])
return
else:
hanoi(n-1, a, c, b)
answer.append([a, b])
hanoi(n-1, c, b, a)
hanoi(n, 1, 3, 2)
return answer
4. 코멘트
- 재귀는 확실히 이해하기가 조금 어려운 것 같다...조금 더 알고리즘 공부를 하거나 손으로 그려보는 방법이 제일 직관적으로 이해하기는 쉬운 듯 싶다.
- 그래도 스터디를 하면서 내가 생각하지 못했던 접근 방식을 생각해 볼 수 있게 되어서 좋다.
'알고리즘_코딩테스트 > 주간코딩 스터디 (주코스)' 카테고리의 다른 글
(Week3)[구현] 순위검색 (0) | 2022.06.20 |
---|---|
(Week3)[BFS] 타겟넘버 (0) | 2022.06.20 |
(Week2)[구현] 오픈채팅방 (0) | 2022.06.20 |
(Week1)[N진법] n진수 게임 (0) | 2022.06.20 |
(Week1)[Heap] 더 맵게 (0) | 2022.06.20 |