๐ฑ ๋ฌธ์
๐ฑ ํ์ด
๋ฐํน๋ ๋์ ์๊ณ ๋ฆฌ์ฆ ๊ฐ์ ์์์ ํ์ด๋ฒ์ ์ฐธ๊ณ ํ์ต๋๋ค.
์ฐ์ , ์๋ ๊ทธ๋ฆผ์ฒ๋ผ n๋ฒ์งธ ์ํ์ 1๋ฒ ์ฅ๋์์ 3๋ฒ ์ฅ๋๋ก ์ฎ๊ธฐ๊ธฐ ์ํ ๊ณผ์ ์ ์๊ฐํด๋ณด๊ฒ ์ต๋๋ค.
1. n-1๊ฐ์ ์ํ์ 1๋ฒ์์ 2๋ฒ ์ฅ๋๋ก ์ฎ๊ธด๋ค.
2. n๋ฒ ์ํ์ 1๋ฒ์์ 3๋ฒ ์ฅ๋๋ก ์ฎ๊ธด๋ค.
3. n-1๊ฐ์ ์ํ์ 2๋ฒ์์ 3๋ฒ ์ฅ๋๋ก ์ฎ๊ธด๋ค.
์ด๋ฅผ ๊ท๋ฉ์ ์ผ๋ก ์ค๋ช
ํ๋ฉด, ์ํ n-1
๊ฐ๋ฅผ ์ฅ๋ a
๋ฒ์์ ์ฅ๋ b
๋ฒ์ผ๋ก ์ฎ๊ธธ ์ ์๋ค๋ฉด, ์ํ n
๊ฐ๋ฅผ ์ฅ๋ a'
์์ ์ฅ๋ b'
๋ฒ์ผ๋ก ์ฎ๊ธธ ์ ์๋ค๋ ์๋ฏธ์
๋๋ค.
๋ฐ๋ผ์ ์ํ n๊ฐ๋ฅผ a๋ฒ ์ฅ๋์์ b๋ฒ ์ฅ๋๋ก ์ฎ๊ธฐ๋ ํจ์๋ฅผ ์ฌ๊ท์์ผ๋ก ๋ํ๋ด๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
1. n-1๊ฐ์ ์ํ์ ์ฅ๋ a์์ ์ฅ๋ 6-a-b๋ก ์ฎ๊ธด๋ค.
2. n๋ฒ ์ํ์ ์ฅ๋ a์์ b๋ก ์ฎ๊ธด๋ค.
3. n-1๊ฐ์ ์ํ์ ์ฅ๋ 6-a-b์์ b๋ก ์ฎ๊ธด๋ค.
์ฌ๊ท ํจ์์ base condition์ n
์ด 1์ผ ๋์๋ ๋ด๊ฐ ์ํ๋ ๊ณณ์ผ๋ก ๋ฌด์กฐ๊ฑด ์ฎ๊ธธ ์ ์์ผ๋ฏ๋ก ์ฅ๋ a
์์ b
๋ก ์ฎ๊ธฐ๋ ๊ฒ์ ์ถ๋ ฅํ๋ฉด ๋ฉ๋๋ค.
์ฝ๋๋ก ๋ํ๋ด๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
def hanoi(n, a, b):
if n == 1:
movements.append((a, b))
return
hanoi(n-1, a, 6-a-b)
movements.append((a, b))
hanoi(n-1, 6-a-b, b)
- hanoi(n, a, b)๋ ์ํ n๊ฐ๋ฅผ ์ฅ๋ a์์ b๋ก ์ฎ๊ธฐ๋ ํจ์์ ๋๋ค.
- ์์์ ์ค๋ช ํ 3๊ฐ์ ๋จ๊ณ๋ฅผ ๊ทธ๋๋ก ์ฌ๊ท์ ์ผ๋ก ๊ตฌํํ์๊ณ , base condition ๋ํ ์์ฑํ์์ต๋๋ค.
๐ฑ ์ ๋ต ์ฝ๋
# !/usr/bin/env python
# -*- coding: utf-8 -*-
# boj 11729 ํ๋
ธ์ดํ
n = int(input())
count = 0
movements = []
def hanoi(n, a, b):
if n == 1:
movements.append((a, b))
return
hanoi(n-1, a, 6-a-b)
movements.append((a, b))
hanoi(n-1, 6-a-b, b)
hanoi(n, 1, 3)
print(len(movements))
for move in movements:
print(*move)
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] #2758 ๋ก๋ (Python, Dynamic Programming) (1) | 2023.10.14 |
---|---|
[BOJ] #15649) N๊ณผ M(1) (Python, Back tracking) (1) | 2023.10.01 |
[ํ๋ก๊ทธ๋๋จธ์ค] ๊ด๋ฌผ ์บ๊ธฐ (Python, ๊ตฌํ) (0) | 2023.09.30 |
[ํ๋ก๊ทธ๋๋จธ์ค] ๊ณผ์ ์งํํ๊ธฐ(Python, Stack, Implementation) (0) | 2023.09.29 |
[ํ๋ก๊ทธ๋๋จธ์ค] ์ ๋ ฅ๋ง์ ๋๋ก ๋๋๊ธฐ (Python, BFS, ์์ ํ์) (1) | 2023.09.28 |
๋๊ธ