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 | 31 |
Tags
- 백준 학교 탐방하기
- 직장인인간
- 백준 3차원 막대기 연결하기
- 삼성 코테
- 프로그래머스
- Python
- 딥러닝 바이블 후기
- 최단거리
- 파이썬
- 패스트캠퍼스후기
- MST
- 코딩테스트
- 파이썬 기초부터 시작하는 딥러닝 영상인식 바이블 Online 강의
- 백트래킹
- 백준 9019
- 백준 23289
- 그리디
- 백준 19950
- 해쉬
- 코테
- 패캠챌린지
- 온풍기 안녕!
- 문자열
- 직장인인강
- 스택
- 백준
- 패스트캠퍼스
- 파이썬 기초부터 시작하는 딥러닝 영상인식 바이블 Online 강의 후기
- 삼성
- 직장인자기계발
Archives
- Today
- Total
programmingu
[백준][코딩연습/재귀함수]#11729 하노이의 탑 본문
문제
세 개의 장대가 있고 첫 번째 장대에는 반경이 서로 다른 n개의 원판이 쌓여 있다. 각 원판은 반경이 큰 순서대로 쌓여있다. 이제 수도승들이 다음 규칙에 따라 첫 번째 장대에서 세 번째 장대로 옮기려 한다.
- 한 번에 한 개의 원판만을 다른 탑으로 옮길 수 있다.
- 쌓아 놓은 원판은 항상 위의 것이 아래의 것보다 작아야 한다.
이 작업을 수행하는데 필요한 이동 순서를 출력하는 프로그램을 작성하라. 단, 이동 횟수는 최소가 되어야 한다.
아래 그림은 원판이 5개인 경우의 예시이다.
입력
첫째 줄에 첫 번째 장대에 쌓인 원판의 개수 N (1 ≤ N ≤ 20)이 주어진다.
출력
첫째 줄에 옮긴 횟수 K를 출력한다.
두 번째 줄부터 수행 과정을 출력한다. 두 번째 줄부터 K개의 줄에 걸쳐 두 정수 A B를 빈칸을 사이에 두고 출력하는데, 이는 A번째 탑의 가장 위에 있는 원판을 B번째 탑의 가장 위로 옮긴다는 뜻이다.
3학년 때 자료구조와 알고리즘 수업을 들으면서 배웠던 내용인데, 복습하는 차원해서 해 보았다.
recursive 함수를 이용해 푸는 문제이다.
n = int(input())
def count_hanoi(n):
if n == 1:
count = 1
return(count)
else:
count = 2 * count_hanoi(n-1) + 1
return(count)
def hanoi(n, from_pos, to_pos, left_pos):
if n==1:
print('{} {}'.format(from_pos, to_pos))
else:
hanoi(n-1,from_pos, left_pos, to_pos)
print('{} {}'.format(from_pos, to_pos))
hanoi(n-1, left_pos, to_pos, from_pos)
count = count_hanoi(n)
print(count)
hanoi(n,1,3,2)
'coding test practice' 카테고리의 다른 글
[백준][코딩연습/백트래킹]#15652 N과 M(4) (0) | 2021.01.08 |
---|---|
[백준][코딩공부/백트래킹]#15651 N과 M(3) (0) | 2021.01.08 |
[백준][코딩공부/백트래킹]#15650 N과 M(2) (0) | 2021.01.08 |
[백준][코딩공부/백트래킹]#15649 N과 M(1) (0) | 2021.01.07 |
[백준][코딩연습/브루트 포스] #2798 블랙잭 (0) | 2021.01.06 |