From f827cb35d67939e88b446cc03ef7474f74905523 Mon Sep 17 00:00:00 2001 From: SSUM <116950962+ssum21@users.noreply.github.com> Date: Fri, 14 Nov 2025 00:20:00 +0900 Subject: [PATCH] =?UTF-8?q?[Gold=20V]=20Title:=20=ED=95=98=EB=85=B8?= =?UTF-8?q?=EC=9D=B4=20=ED=83=91=20=EC=9D=B4=EB=8F=99=20=EC=88=9C=EC=84=9C?= =?UTF-8?q?,=20Time:=201172=20ms,=20Memory:=20108792=20KB=20-BaekjoonHub?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Gold/11729. 하노이 탑 이동 순서/README.md | 41 +++++++++++++++++++ .../하노이 탑 이동 순서.py | 25 +++++++++++ 2 files changed, 66 insertions(+) create mode 100644 백준/Gold/11729. 하노이 탑 이동 순서/README.md create mode 100644 백준/Gold/11729. 하노이 탑 이동 순서/하노이 탑 이동 순서.py diff --git a/백준/Gold/11729. 하노이 탑 이동 순서/README.md b/백준/Gold/11729. 하노이 탑 이동 순서/README.md new file mode 100644 index 0000000..daf1d65 --- /dev/null +++ b/백준/Gold/11729. 하노이 탑 이동 순서/README.md @@ -0,0 +1,41 @@ +# [Gold V] 하노이 탑 이동 순서 - 11729 + +[문제 링크](https://www.acmicpc.net/problem/11729) + +### 성능 요약 + +메모리: 108792 KB, 시간: 1172 ms + +### 분류 + +재귀 + +### 제출 일자 + +2025년 11월 14일 00:19:47 + +### 문제 설명 + +
세 개의 장대가 있고 첫 번째 장대에는 반경이 서로 다른 n개의 원판이 쌓여 있다. 각 원판은 반경이 큰 순서대로 쌓여있다. 이제 수도승들이 다음 규칙에 따라 첫 번째 장대에서 세 번째 장대로 옮기려 한다.
+ +이 작업을 수행하는데 필요한 이동 순서를 출력하는 프로그램을 작성하라. 단, 이동 횟수는 최소가 되어야 한다.
+ +아래 그림은 원판이 5개인 경우의 예시이다.
+ +
첫째 줄에 첫 번째 장대에 쌓인 원판의 개수 N (1 ≤ N ≤ 20)이 주어진다.
+ +### 출력 + +첫째 줄에 옮긴 횟수 K를 출력한다.
+ +두 번째 줄부터 수행 과정을 출력한다. 두 번째 줄부터 K개의 줄에 걸쳐 두 정수 A B를 빈칸을 사이에 두고 출력하는데, 이는 A번째 탑의 가장 위에 있는 원판을 B번째 탑의 가장 위로 옮긴다는 뜻이다.
+ diff --git a/백준/Gold/11729. 하노이 탑 이동 순서/하노이 탑 이동 순서.py b/백준/Gold/11729. 하노이 탑 이동 순서/하노이 탑 이동 순서.py new file mode 100644 index 0000000..161cd01 --- /dev/null +++ b/백준/Gold/11729. 하노이 탑 이동 순서/하노이 탑 이동 순서.py @@ -0,0 +1,25 @@ +import sys +from collections import deque +sys.setrecursionlimit(10**8) + +input = sys.stdin.readline + +n = int(input()) +count = 0 +result = [] +def hanoi(n, start, end, temp): + global count, result + if n == 1: + count += 1 + result.append((start, end)) + return + hanoi(n-1, start, temp, end) + count += 1 + result.append((start, end)) + hanoi(n-1, temp, end, start) + +hanoi(n, 1, 3, 2) +print(count) +for s, e in result: + print(s, e) +