Koala - 10기/기초 알고리즘 스터디
[ 백준 / Python ] #1914 하노이의 탑
계란소년
2023. 5. 27. 15:15
문제
https://www.acmicpc.net/problem/1914
1914번: 하노이 탑
세 개의 장대가 있고 첫 번째 장대에는 반경이 서로 다른 n개의 원판이 쌓여 있다. 각 원판은 반경이 큰 순서대로 쌓여있다. 이제 수도승들이 다음 규칙에 따라 첫 번째 장대에서 세 번째 장대로
www.acmicpc.net
Algorithm
재귀호출을 이용해서 풀었다.
이동횟수는 항상 2**n-1
1 1번 기둥에 N개 원판 있고,이를 3번 기둥으로 옮길때
2 1번 기둥에 위치한 N개의 원판 중 N-1 개를 2번으로 옮김
3 나머지 1개를 3번으로 옮김
4 2번 기둥에 있는 N-1개 원판을 3번 기둥으로 옮김
f(n,a,b,c): n개 원판 1번기둥 a, 2번기둥 b, 3번기둥 c
n=1이면 하나 옮기면 끝
n>1이면
1 1번의 N-1개를 2번으로 옮겨야 하므로 f(n-1,a,c,b)
2 나머지 1번의 1개를 3번으로 옮겨야 하므로 f(1,a,b,c)
2번 기둥에 잇는 n-1개를 3번으로 옮겨야 하므로 f(n-1,b,a,c)
Code
def f(n, a, b, c):
if(n == 1):
print(a, c, sep = " ")
else:
f(n-1, a, c, b)
f(1, a, b, c)
f(n-1, b, a, c)
n = int(input())
print(2**n-1)
if(n <= 20):
f(n, 1, 2, 3)