1. ํ๋ ธ์ดํ ์๊ณ ๋ฆฌ์ฆ ์๋ฆฌ
ํ๋ ธ์ดํ์ ์ฌ๊ท๋ฅผ ์ด์ฉํ ๋ํ์ ์ธ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์๋ ค์ ธ ์๋ค.
์ด 3๊ฐ์ ๊ธฐ๋ฅ์ด ์กด์ฌํ๋ค. ์ฃผ์ด์ง n๊ฐ์ ์ํ์ ๋ค๋ฅธ ๊ธฐ๋ฅ์ผ๋ก ์ฎ๊ธฐ๋ ๊ฒ์ ๋งํ๋ค.
์ด๋ ๋ช ๊ฐ์ง ๊ท์น๋ค์ด ์กด์ฌํ๋ค.
- ํ ๋ฒ์ ๋ฑ ํ ๊ฐ์ ์ํ๋ง ์ด๋ํ ์ ์๋ค.
- ์ฎ๊ฒจ์ง ์ํ์ ๋ฌด์กฐ๊ฑด ๋งจ ์์ ์ฌ๋ผ๊ฐ๋ค.
- ๋งจ ์์ ์๋ ์ํ๋ง ์ฎ๊ธธ ์ ์๋ค.
- ํฌ๊ธฐ๊ฐ ํฐ ์ํ์ ์์ ์ํ ์๋ก ์ฌ๋ผ๊ฐ ์ ์๋ค.
ํ๋ ธ์ดํ์ 3๋ฒ์งธ ๊ธฐ๋ฅ์ผ๋ก ์ฎ๊ธฐ๋๋ฐ ํ์ํ ์ดํ์๋ "2^n - 1" ๋ฒ์ด๋ค.
์๋ฅผ ๋ค์ด 3๊ฐ์ ์ํ์ ์ฎ๊ธด๋ค๊ณ ์๊ฐํด๋ณด์.
A์ ์๋ 3๊ฐ์ง๋ฆฌ ๊ธฐ๋ฅ์ C๋ก B๋ก ์ฎ๊ธฐ๋ ๊ณผ์ ์ด๋ค.
์ฐ์ 3๋ฒ ์ํ์ ์ฎ๊ธฐ๊ธฐ ์ํด์๋ ์์ ์๋ 1๋ฒ๊ณผ 2๋ฒ ์ํ์ C๋ก ์ฎ๊ฒจ์ผ ํ๋ค.
- 1๋ฒ ์ํ์ A์์ B๋ก ์ด๋
- 2๋ฒ ์ํ์ A์์ C๋ก ์ด๋
- 1๋ฒ ์ํ์ B์์ C๋ก ์ด๋
์์ ๊ฐ์ด 3๋ฒ์ ๊ณผ์ ์ ๊ฑฐ์ณ์ผ ์์ ์๋ ๋ ๊ฐ์ ์ํ์ ์ฎ๊ธธ ์ ์๋ค.
3๋ฒ ์ํ์ ์ฎ๊ธฐ๊ธฐ ์ํด 2๊ฐ์ง๋ฆฌ ๊ธฐ๋ฅ์ ์ฎ๊ธฐ๋ ๋ฌธ์ ๋ฅผ ํผ ๊ฒ์ด๋ค.
๋ฐ๋ก ์ฌ๊ท์ ์ผ๋ก ํด๊ฒฐํ ๊ฒ์ด๋ค.
3๊ฐ์ ์ํ์ ์ฎ๊ธฐ๊ธฐ ์ํด 2๊ฐ ์ํ๊น์ง ์ฎ๊ธฐ๋ ํ์๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค.
๋ง์ฝ์ n๊ฐ์ ์ํ์ด ์ฃผ์ด์ง๋ค๋ฉด n-1๊ฐ์ ์ํ์ ์ฎ๊ธฐ๋ ํ์๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๊ฒ์ด๋ค.
๋ค์ 3๊ฐ์ ์ํ์ ์ฎ๊ธฐ๋ ๊ณผ์ ์ ์ดํด๋ณด์.
์ด์ C์์ B๋ก 2๊ฐ์ ์ํ์ ์ฎ๊ฒจ์ผ ํ๋ค.
- 1๋ฒ ์ํ์ C์์ A๋ก ์ด๋
- 2๋ฒ ์ํ์ C์์ B๋ก ์ด๋
- A์ ์๋ 3๋ฒ ์ํ์ A์์ B๋ก ์ด๋
2๊ฐ์ ์ํ์ ์ฎ๊ธฐ๊ธฐ ์ํด์๋ ์ด 3๋ฒ์ ์ฎ๊ธฐ๋ ํ์๊ฐ ํ์ํ๋ค.
์ฌ๊ท์ ์ผ๋ก 3๊ฐ์ ์ํ์ ์ฎ๊ธฐ๊ธฐ์ํด 2๊ฐ์ ์ํ์ ์ฎ๊ธฐ๋ ๋ฐฉ์์ ๋ถ๋ฌ ํด๊ฒฐํ๊ณ
3๋ฒ ์ํ์ 1๋ฒ ์ฎ๊ธฐ๊ธฐ ๋๋ฌธ์ ์ด 7๋ฒ์ ์ด๋ ํ์๊ฐ ํ์ํ๋ค.
2^3 - 1 = 7
2^n -1
2. ํ๋ ธ์ดํ ์๊ณ ๋ฆฌ์ฆ ์์ ์ฝ๋(JS)
๋ฐฑ์ค ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ 11729๋ฒ
์ํ์ ์ฎ๊ธด ํ์,
์ํ์ ์ด๋ ๊ณผ์ ์ ์ถ๋ ฅํ๋ ๋ฌธ์ ์๋ค.
node.js๋ก ์ซ์๋ฅผ ์ ๋ ฅ๋ฐ๊ธฐ ์ํ ์ฝ๋๋ ์๋ตํ๋ค.
let answer = '';
let count = 0;
function hanoi(n, from, other, to) {
if (n === 0) return;
// n-1๊ฐ์ ์ํ์ ๋จ์์ถ์ธ other๋ก ์ฎ๊น
hanoi(n - 1, from, to, other);
// ๋ง์ง๋ง์ ์๋ ์ํ์ ๋ชฉ์ ์ง๋ก ์ด๋
answer += `${from} ${to}\n`
count ++;
// other์ถ์ผ๋ก ์ฎ๊ฒผ๋ n-1๊ฐ์ ์ํ์ to๋ก ์ฎ๊น
hanoi(n - 1, other, from, to);
return `${count}\n${answer}`;
}
console.log(hanoi(n, 1, 2, 3))
n = ์๋ฐ์ ๊ฐ์
from = ์๋ฐ์ด ํ์ฌ ์๋ ์ถ
to = ์๋ฐ์ ์ฎ๊ธฐ๋ ค๊ณ ํ๋ ์ถ
other = ๋จ์ ์ถ
์์์ ์ค๋ช ํ๋ ๊ฑฐ์ฒ๋ผ ์ํ๋ค์ ์ฎ๊ธฐ๋ ค๋ฉด ์ฌ๊ท์ ์ผ๋ก ํจ์๋ฅผ ๋ถ๋ฌ์์ ํด๊ฒฐํด์ผ ํ๋ค.
์ํ์ ๊ฐ์๊ฐ 0์ด๋ฉด ์๋ฌด๊ฒ๋ ์์ด return ์ํค๋ ์กฐ๊ฑด์ ์ถ๊ฐํ๋ค.
์ํ์ ์ฎ๊ธธ ๋๋ง๋ค count๊ฐ 1์ฉ ์ฌ๋ผ๊ฐ ์ ์๊ฒ ํด ์ฃผ๊ณ
์ํ์ด from์์ to๋ก ์ฎ๊ฒจ์ง ๋์ ์ด๋ ๊ณผ์ ์ answer์ ์ถ๊ฐํด์ค๋ค.
๋ง์ง๋ง์ผ๋ก count์ answer๋ฅผ return ํ๊ณ ์ถ๋ ฅํ๋ฉด ๋์ด๋ค.
๊ณ์ํด์ ๋ถ๋ฌ๋ธ๋ค๋ ๋ง์ด ์ด์ฉ๋ฉด ํท๊ฐ๋ฆด ์ ์์ง๋ง
ํ ๋ฒ ์ดํดํ๋ฉด ์ฌ๊ธฐ์ ๊ธฐ ํ์ฉํ ์ ์๋ค๋ ์๊ฐ์ด ๋ ๋ค.
'Algorithms > Algorithms' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๊ณ ๋ฆฌ์ฆ ๊ธฐ๋ณธ] ์์ ํ์ (๋ธ๋ฃจํธ ํฌ์ค Brute Force) (0) | 2022.05.25 |
---|---|
[์๊ณ ๋ฆฌ์ฆ ๊ธฐ๋ณธ] ํ์(Greedy) ์๊ณ ๋ฆฌ์ฆ (0) | 2022.05.21 |