์ฌ๊ท๋ฌธ์ ์ค 'ํ๋ ธ์ด์ ํ' ๋ฌธ์ ๊ฐ ์๋ค. ๋งจ ์ฒ์์๋ ํ๋ ธ์ด์ ํ์ ์ฌ๊ท๋ก ํผ๋ค๋ ์๊ฐ์ ํ์ง ๋ชปํ๋ค.
์ด๋ ๋ถ๋ถ์์ ์ฌ๊ท๋ฅผ ์ฐพ์ ์ ์๋์ง ๋ณด์.
๊ท์น ์ฐพ๊ธฐ
๋จผ์ ํ๋ ธ์ด์ ํ์๋ ๊ท์น์ด ์กด์ฌํ๋ค.
1. ํ ๋ฒ์ ํ๊ฐ์ ์ํ๋ง ์ฎ๊ธธ ์ ์๋ค.
2. ํฐ ์ํ์ด ์์ ์ํ ์์ ์์ด์๋ ์ ๋๋ค.
๋จผ์ ์ํ์ด 1๊ฐ์ธ ๊ฒฝ์ฐ๋ถํฐ ์๊ฐํด๋ณด์.
์ํ์ด 1๊ฐ์ธ ๊ฒฝ์ฐ ๋จ์ํ๊ฒ A์์ C๋ก ์ฎ๊ฒจ์ฃผ๋ฉด ๋๋ค. ๋ฒ ์ด์ค ์ผ์ด์ค๊ฐ ๋ ๊ฒ์ด๋ค!
๊ทธ๋ผ ์ํ์ด ๋๊ฐ์ธ ๊ฒฝ์ฐ๋ฅผ ๋ณด์.
์ํ์ด ๋๊ฐ์ธ ๊ฒฝ์ฐ, ํฐ ์ํ์ด C์ ๋จผ์ ๊น๋ ค์ผ ์์ ์ํ์ด ๊ทธ ์์ ์ฌ๋ผ๊ฐ ์ ์๊ธฐ ๋๋ฌธ์ ๋จผ์ ํฐ ์ํ์ C๋ก ์ฎ๊ธฐ๊ธฐ ์ํด ์์ ์ํ์ B๋ก ์ฎ๊ธด๋ค. ์ดํ ํฐ ์ํ์ C๋ก ์ฎ๊ธด๋ค. ๋ง์ง๋ง์ผ๋ก ์์ ์ํ์ B์์ C๋ก ์ฎ๊ธด๋ค.
๊ทธ๋ผ ์ํ 3๊ฐ์ธ ๊ฒฝ์ฐ๋ ๋ณด์.
์ด๋ฒ์๋ ์ข ๋ ํฐํ์์ ๋ฌธ์ ๋ฅผ ๋ฐ๋ผ๋ณด์.
๋จผ์ ๊ฐ์ฅ ํฐ ์ํ์ 3์ด๋ผ๊ณ ํ์. 3์ด C์ ๊น๋ ค์ผ ๋๋จธ์ง ๊ฒ๋ค์ด ์๋ก ์ฌ ์ ์๊ธฐ ๋๋ฌธ์, ์ด๋ฅผ ์ํด์ 3์ ์ ์ธํ 1,2๋ฅผ B๋ก ์ฎ๊ฒจ์ผ ํ๋ค. B๋ก ์ฎ๊ธด ํ 3์ C๋ก ์ฎ๊ธด๋ค. ๊ทธ๋ฆฌ๊ณ B์ ์๋ 1,2๋ฅผ C๋ก ์ฎ๊ธด๋ค.
๋ค์ํ๋ฒ ์ ๋ฆฌํ์๋ฉด ์๋ ์ธ๋จ๊ณ๋ก ๋ถ๋ฅํ ์ ์๋ค.
1. ๊ฐ์ฅ ํฐ ์ํ 3์ C์ ๊ฐ์ฅ ์๋์ ๊น๊ธฐ ์ํด, ๋๋จธ์ง ๊ฒ๋ค์ B๋ก ์ฎ๊ธด๋ค. (๊ทธ๋ฆผ 1 ~ ๊ทธ๋ฆผ 4)
2. ๊ฐ์ฅ ํฐ ์ํ 3์ C๋ก ์ฎ๊ธด๋ค. ( ๊ทธ๋ฆผ 5 )
3. ๋๋จธ์ง ์ํ์ B์์ C๋ก ์ฎ๊ธด๋ค. ( ๊ทธ๋ฆผ 6 ~ ๊ทธ๋ฆผ 8)
๊ฐ์ฅ ํฐ ์ํ์ ์ฎ๊ธฐ๊ธฐ ์ํ ์ ์ฒ๋ฆฌ / ๊ฐ์ฅ ํฐ ์ํ ์ฎ๊ธฐ๊ธฐ / ๊ฐ์ฅ ํฐ ์ํ์ ์ฎ๊ธด ํ ํ์ฒ๋ฆฌ
๋ง์ฝ ์ํ์ด 4๊ฐ๊ฐ ์๋ค๋ฉด?
๊ฐ์ฅ ํฐ ์ํ 4๋ฅผ C๋ก ์ฎ๊ธฐ๊ธฐ ์ํด
1. ๋๋จธ์ง 3๊ฐ์ ์ํ์ B๋ก ์ฎ๊ธฐ๊ณ
2. ๊ฐ์ฅ ํฐ ์ํ 4๋ฅผ C๋ก ์ฎ๊ธฐ๊ณ
3. ๋๋จธ์ง ์ํ์ B์์ C๋ก ์ฎ๊ธด๋ค.
์ด๋ฅผ ์ผ๋ฐํ ํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
N๊ฐ์ ์ํ์ด ์์ ๋
1. N-1๊ฐ์ ์ํ์ B๋ก ์ฎ๊ธฐ๊ณ
2. N๋ฒ์งธ ์ํ์ C๋ก ์ฎ๊ธฐ๊ณ
3. N-1๊ฐ์ ์ํ์ C๋ก ์ฎ๊ธด๋ค.
๊ทผ๋ฐ 1. N-1๊ฐ์ ์ํ์ B๋ก ์ฎ๊ธฐ๊ณ ์์ ๋ 3๊ฐ์ ๋จ๊ณ๊ฐ ์คํ๋๋ค.
1-1. N-2๊ฐ์ ์ํ์ C๋ก ์ฎ๊ธฐ๊ณ
1-2. N-1๋ฒ์งธ ์ํ์ B๋ก ์ฎ๊ธฐ๊ณ
1-3. N-2๊ฐ์ ์ํ์ B๋ก ์ฎ๊ธด๋ค.
์ด๋ฐ ๋ฐฉ์์ผ๋ก ์งํํ๋ค ๋ณด๋ฉด ๊ฒฐ๊ตญ N๋ฒ์งธ ์ํ์ ์ฎ๊ธฐ๋ ค๋ฉด N-1๊ฐ๋ฅผ ๋ค๋ฅธ ๊ณณ์ผ๋ก ์ฎ๊ฒจ์ผ ํ๊ณ , N-1๋ฒ์งธ ์ํ์ ์ฎ๊ธฐ๋ ค๋ฉด N-2๊ฐ์ ์ํ์ ์ฎ๊ฒจ์ผ ํ๊ณ , N-2๋ฒ์งธ ์ํ์ ์ฎ๊ธฐ๋ ค๋ฉด N-3๊ฐ์ ์ํ์ ์ฎ๊ฒจ์ผ ํ๊ณ ... ๋ง์ง๋ง์ 1๊ฐ์ ์ํ์ ์ฎ๊ธฐ๋ ์ฌ๊ท๊ฐ ์ ์๋๋ค.
ํ์ง๋ง N๋ฒ์งธ ์ํ์ ์ฎ๊ธธ ๋์ N-1๋ฒ์งธ ์ํ์ ์ฎ๊ธธ๋ ์ฎ๊ธฐ๋ ๊ณณ์ด ๋ฌ๋ผ์ง๋ค. ๋ชจ๋ ์ํ์ ์ต์ข ๋ชฉ์ ์ง๋ C๋ก ์ฎ๊ฒจ๊ฐ๋ ๊ฒ์ด์ง๋ง, ๊ทธ ๊ณผ์ ์์ ๊ผญ ๊ฑฐ์ณ๊ฐ์ผ ํ๋ ๊ธฐ๋ฅ์ด ์๊ธฐ ๋๋ฌธ์ด๋ค. ๋ฐ๋ผ์ ํจ์๋ฅผ ์ ์ํ ๋ ์ถ๋ฐ์ , ๋ชฉ์ ์ง, ๊ฒฝ์ ์ ์ ์ค์ ํด์ผ ํ๋ค.
ํจ์ ์ ์
def hanoi(N, start, end, via):
if N == 1: # ์ฎ๊ธธ ์ํ์ด 1๊ฐ๋ฉด
print(start, "->", end) # ์์์ ์์ ๋์ฐฉ์ ์ผ๋ก ์ด๋
else: # ์ํ์ด 2๊ฐ ์ด์์ด๋ฉด
hanoi(N-1, start, via, end) # N-1๊ฐ๋ฅผ ๊ฒฝ์ ์ง๋ก ์ฎ๊ธด๋ค.
print(start, "->",end) # N๋ฒ์งธ ์ํ์ ๋์ฐฉ์ ์ผ๋ก ์ฎ๊ธด๋ค.
hanoi(N-1, via, end, start) # N-1๊ฐ๋ฅผ ๋์ฐฉ์ ์ผ๋ก ์ฎ๊ธด๋ค.
์ ํจ์๋ฅผ ์ ์ํ๊ณ ์คํํ๋ฉด ํ๋ ธ์ด์ ํ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋๋ค. ๋ฌธ์ ๋ฅผ ํฐ ํ์์ ๋ฐ๋ผ๋ด์ผ ํ ๊ฒ ๊ฐ๋ค.