장 준
씨포유
장 준
전체 방문자
오늘
어제
  • 분류 전체보기 (91)
    • 프로그래밍언어 (15)
      • c언어 (10)
      • 파이썬 (0)
      • 자바스크립트 (5)
    • PS (58)
      • 알고리즘 이론 (18)
      • 프로그래머스 (5)
      • 백준 (35)
    • CS (16)
      • 자료구조 (5)
      • 운영체제 (3)
      • 네트워크 (5)
      • 데이터베이스 (0)
      • 기초 지식 (3)
    • 브랜드 (1)

블로그 메뉴

  • 태그

인기 글

태그

  • Priority Queue
  • recursion
  • bitmask
  • codesandbox
  • 자바스크립트
  • Kruskal algorithm
  • Network
  • Visual Studio
  • 자료구조
  • JS
  • BFS
  • 파이썬
  • python3
  • DP
  • 알고리즘
  • nodejs
  • C
  • Implementation
  • 백준
  • CS
  • 씨포유
  • 프로그래머스
  • 프로그래밍언어
  • 기초 지식
  • PS
  • DFS
  • 코딩테스트
  • JavaScript
  • Stack
  • pypy3

최근 댓글

최근 글

hELLO · Designed By 정상우.
장 준

씨포유

[백준(BOJ)] #1914- 하노이 탑 (파이썬, PyPy3)
PS/백준

[백준(BOJ)] #1914- 하노이 탑 (파이썬, PyPy3)

2022. 10. 11. 14:22
728x90

문제

https://www.acmicpc.net/problem/1914

 

1914번: 하노이 탑

세 개의 장대가 있고 첫 번째 장대에는 반경이 서로 다른 n개의 원판이 쌓여 있다. 각 원판은 반경이 큰 순서대로 쌓여있다. 이제 수도승들이 다음 규칙에 따라 첫 번째 장대에서 세 번째 장대로

www.acmicpc.net


문제 풀이

재귀 알고리즘 적용

2022.07.05 - [PS/알고리즘 이론] - [파이썬으로 배우는 알고리즘] 재귀(Recursion) 알고리즘

 

[파이썬으로 배우는 알고리즘] 재귀(Recursion) 알고리즘

재귀(recursion)란?  같은 알고리즘을 사용하여 정의한 알고리즘을 재귀 알고리즘이라고 합니다. 어떠한 역할을 하는 함수에 자기 자신을 다시 호출하여 재귀 알고리즘을 적용할 수 있고, 이러한

c4u-rdav.tistory.com

 

첫 번째 장대에서 세 번째 장대로 3(n) 개의 원판을 옮기는 과정

 

1)

 

2)

 

3)

 

4)

 

5)

 

6)

 

7)

 

- n-1개의 원판을 두 번째 장대에 놓는다. 1) ~ 3)
- 1 개의 원판을 세 번째 장대에 놓는다. 4) 
- 두 번째 장대에 있는 n-1개의 원판을 세 번째 장대에 놓는다. 5) ~ 7)

 

이를 구현하기 위해 재귀 알고리즘을 사용하여 다음과 같이 코드를 작성할 수 있습니다.

# 재귀 알고리즘
# a 장대에서 b 장대로 k-1개를 놓음
dfs(a, c, b, k-1)
# a 장대에서 c 장대로 제일 큰 원판을 놓음
dfs(a, b, c, 1)
# b 장대에서 c 장대로 나머지 k-1개를 놓음
dfs(b, a, c, k-1)

구현

코드

import sys
input = sys.stdin.readline

def dfs(a, b, c, k):
    if k == 1:
        print(a, c)
        return
    dfs(a, c, b, k-1)
    dfs(a, b, c, 1)
    dfs(b, a, c, k-1)

if __name__ == "__main__":
    n = int(input())

    print(2 ** n - 1)
    if n <= 20:
        dfs(1, 2, 3, n)

결과

728x90
반응형
저작자표시 (새창열림)

'PS > 백준' 카테고리의 다른 글

[백준(BOJ)] #2436- 공약수 (파이썬, PyPy3)  (0) 2022.10.14
[백준(BOJ)] #1725- 히스토그램 (파이썬, PyPy3)  (0) 2022.10.13
[백준(BOJ)] #15997- 승부 예측 (파이썬, PyPy3)  (0) 2022.10.10
[백준(BOJ)] #11053- 가장 긴 증가하는 부분 수열 (파이썬, PyPy3)  (0) 2022.08.23
[백준(BOJ)] #13459- 구슬 탈출 (파이썬, PyPy3)  (0) 2022.08.20
    'PS/백준' 카테고리의 다른 글
    • [백준(BOJ)] #2436- 공약수 (파이썬, PyPy3)
    • [백준(BOJ)] #1725- 히스토그램 (파이썬, PyPy3)
    • [백준(BOJ)] #15997- 승부 예측 (파이썬, PyPy3)
    • [백준(BOJ)] #11053- 가장 긴 증가하는 부분 수열 (파이썬, PyPy3)
    장 준
    장 준
    C4U(Computer For You)

    티스토리툴바