-
๋ฌธ์ 55. ๊ณตํฌ์ ํ๋ ธ์ด์ ํ๐ง codingtest/javascript 100์ 2022. 3. 31. 09:15728x90
ํ๋ ธ์ด์ ํ์ 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๋ฐํด
'๐ง codingtest > javascript 100์ ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฌธ์ 69. ๊ณจ๋๋ฐํ์ ์ถ์ธก (0) 2022.04.04 ๋ฌธ์ 66. ๋ธ๋ญํ ์๊ธฐ (0) 2022.04.01 ๋ฌธ์ 53. ๊ดํธ ๋ฌธ์์ด (0) 2022.03.28 ๋ฌธ์ 50. ๋ฒ๋ธ์ ๋ ฌ ๊ตฌํํ๊ธฐ (0) 2022.03.26 ๋ฌธ์ 38. ์๋ฆผ์ด์ ์๋ฅด๋ฐ์ดํธ (0) 2022.03.25