๐ง codingtest/javascript 100์
๋ฌธ์ 55. ๊ณตํฌ์ ํ๋ ธ์ด์ ํ
awesomeyelim
2022. 3. 31. 09:15
728x90
ํ๋ ธ์ด์ ํ์ A,B,C 3๊ฐ์ ๊ธฐ๋ฅ๊ณผ ๊ธฐ๋ฅ์ ๊ฝ์ ์ ์๋ N๊ฐ์ ์ํ์ผ๋ก ์ด๋ฃจ์ด์ ธ ์์
- ๋ค์์ ๊ท์น์ ๋ง์กฑํด์ผํจ
- ์ฒ์์ ๋ชจ๋ ์ํ์ A ๊ธฐ๋ฅ์ ๊ฝํ ์๋ค
- ๋ชจ๋ ์ํ์ ์ง๋ฆ์ ๋ค๋ฅด๋ค.
- ์ด ์๋ฐ์ ์ธ ๊ฐ์ ๊ธฐ๋ฅ์ค ํ๋์ ๋ฐ๋์ ๊ฝํ์ผ ํ๋ค.
- ์์ ์๋ฐ ์์ ํฐ ์๋ฐ์ ๋์ ์ ์๋ค.
- ํ ๋ฒ์ ํ๋์ ์ํ(๊ฐ์ฅ ์์ ์๋ ์ํ)๋ง์ ์ฎ๊ธธ ์ ์๋ค.
- A ๊ธฐ๋ฅ์ ์๋ฐ N๊ฐ๋ฅผ ๋ชจ๋ C์๋ฐ์ผ๋ก ์ฎ๊ธฐ๊ณ ์ถ๋ค.
- ๋ชจ๋ ์๋ฐ์ ์ฎ๊ธฐ๊ธฐ ์ํด ์คํ๋์ด์ผํ ์ต์ ์๋ฐ ์ด๋ ํ์๋ฅผ ๊ณ์ฐํ์ฌ๋ผ.
๋ฏธ๋ฆฌ ์๊ฐํด ๋ด์ผํ ๊ฒ
์๋ฐ ๊ฐฏ์(n)์ ๋ฐ๋ฅธ ์ด๋ ํ์
- n = 1, 1๋ฒ
n = 2, 3๋ฒ
n = 3, 7๋ฒ
n = 5, 15๋ฒ
๋ค์๊ณผ ๊ฐ์ ์ ํ์์ ๊ฐ์ง๋ค
- 2^n - 1 = ์ด๋ํ์
๊ทธ๋ ๋ค๋ฉด ์ด๋๊ฒฝ๋ก๋ ์ด๋ป๊ฒ ์ถ์ ํ ์ ์์๊น?
- ์์ ๊ฐ์ ์ ํ์์ ์ฌ๊ทํจ์๋ฅผ ์ด์ฉํ์ฌ ์ถ์ ํด๋ณด์
์ ๋ต
const route = [];
function hanoi(์๋ฐ์์, ์์๊ธฐ๋ฅA, ๋ชฉํ๊ธฐ๋ฅC, ๋ณด์กฐ๊ธฐ๋ฅB){
// ์ํ์ด ํ๊ฐ ์ผ๋๋ ๋ฐ๋ก ์ฎ๊ธฐ๋ฉด ๋ฉ๋๋ค.
if (์๋ฐ์์ === 1){
route.push([์์๊ธฐ๋ฅA, ๋ชฉํ๊ธฐ๋ฅC]);
return 1;
}
// ์๋ฐ์ด n-1๊ฐ๋ฅผ ๋ณด์กฐ๊ธฐ๋ฅ์ผ๋ก ์ฎ๊ธฐ๊ณ
hanoi(์๋ฐ์์-1, ์์๊ธฐ๋ฅA, ๋ณด์กฐ๊ธฐ๋ฅB, ๋ชฉํ๊ธฐ๋ฅC)
// ๊ฐ์ฅ ํฐ ์๋ฐ์ ๋ชฉํ๊ธฐ๋ฅC์ผ๋ก
route.push([์์๊ธฐ๋ฅA, ๋ชฉํ๊ธฐ๋ฅC])
// ๋ณด์กฐ๊ธฐ๋ฅ๊ณผ ์์๊ธฐ๋ฅA์ ๋ฐ๊ฟ๋๋ค.
hanoi(์๋ฐ์์-1, ๋ณด์กฐ๊ธฐ๋ฅB, ๋ชฉํ๊ธฐ๋ฅC, ์์๊ธฐ๋ฅA)
}
hanoi(3, 'A', 'C' ,'B');
console.log(route); // ์ด๋๊ฒฝ๋ก
console.log(route.length);
> ์ญ์ถ์
function hanoi(์๋ฐ์์, ์์๊ธฐ๋ฅA, ๋ชฉํ๊ธฐ๋ฅC, ๋ณด์กฐ๊ธฐ๋ฅB){ } ๋ฅผ ํ๋ํ๋ ์ดํด๋ณด์ !
1. ์๋ฐ์ด ํ๋์ผ ๋๋ ์์A -> ๋ชฉํC ๋ก ๋ฐ๋ก ์ด๋์ ํ๋ฉด๋๋ค.
if (์๋ฐ์์ === 1){
route.push([์์๊ธฐ๋ฅA, ๋ชฉํ๊ธฐ๋ฅC]);
return 1;
}
2. ์๋ฐ๊ฐฏ์๋ฅผ 3์ผ๋ก ๊ฐ์ ํ์๋
// ์๋ฐ์ด n-1๊ฐ๋ฅผ ๋ณด์กฐ๊ธฐ๋ฅB๋ก ์ฎ๊ธฐ๊ณ
hanoi(์๋ฐ์์-1, ์์๊ธฐ๋ฅA, ๋ณด์กฐ๊ธฐ๋ฅB, ๋ชฉํ๊ธฐ๋ฅC)
// ๊ฐ์ฅ ํฐ ์๋ฐ์ ๋ชฉํ๊ธฐ๋ฅC์ผ๋ก
route.push([์์๊ธฐ๋ฅA, ๋ชฉํ๊ธฐ๋ฅC])
// ๋ณด์กฐ๊ธฐ๋ฅB๊ณผ ์์๊ธฐ๋ฅA์ ๋ฐ๊ฟ๋๋ค.
hanoi(์๋ฐ์์-1, ๋ณด์กฐ๊ธฐ๋ฅB, ๋ชฉํ๊ธฐ๋ฅC, ์์๊ธฐ๋ฅA)
3. ์ฌ๊ทํจ์์ ํธ์ถ์์๋ฅผ ๋ฐ์ ธ๋ณด๋ฉฐ ๊ฒฐ๊ณผ ๋์ถ์ ์๊ฐํด๋ณด์
function ํ๋
ธ์ด(3, 'A', 'C' ,'B')
function ํ๋
ธ์ด(2, 'A', 'B' ,'C')
function ํ๋
ธ์ด(1, 'A', 'C' ,'B')
์ํ์์ด๋๊ฒฝ๋ก.push('A', 'C') // 1๋ฒ์งธ
์ํ์์ด๋๊ฒฝ๋ก.push('A', 'B')// 2๋ฒ์งธ
function ํ๋
ธ์ด(1, 'C', 'B', 'A')
์ํ์์ด๋๊ฒฝ๋ก.push('C', 'B')// 3๋ฒ์งธ
----------------------------------- 1๋ฐํด
์ํ์์ด๋๊ฒฝ๋ก.push('A', 'C')// 4๋ฒ์งธ
function ํ๋
ธ์ด(2, 'B', 'C' ,'A')
function ํ๋
ธ์ด(1, 'B', 'A' ,'C')
์ํ์์ด๋๊ฒฝ๋ก.push('B', 'A') // 5๋ฒ์งธ
์ํ์์ด๋๊ฒฝ๋ก.push('B', 'C')// 6๋ฒ์งธ
function ํ๋
ธ์ด(1, 'A', 'C', 'B')
์ํ์์ด๋๊ฒฝ๋ก.push('A', 'C')// 7๋ฒ์งธ
----------------------------------- 2๋ฐํด