์๊ณ ๋ฆฌ์ฆ/ํ๊ทธ ๋ณ ํ์ด
[๋์ ๊ณํ๋ฒ]๊ณ๋จ์ค๋ฅด๊ธฐ
choi95
2021. 8. 15. 12:54
๋ฌธ์
์ฒ ์๋ ๊ณ๋จ์ ์ค๋ฅผ ๋ ํ ๋ฒ์ ํ ๊ณ๋จ ๋๋ ๋ ๊ณ๋จ์ฉ ์ฌ๋ผ๊ฐ๋ค. ๋ง์ฝ ์ด 4๊ณ๋จ์ ์ค๋ฅธ๋ค๋ฉด ๊ทธ ๋ฐฉ๋ฒ์ ์๋ (1 + 1 + 1 + 1, 1 + 1 + 2, 1 + 2 + 1, 2 + 1 + 1, 2 + 2) ๋ก 5๊ฐ์ง์ด๋ค.๊ทธ๋ ๋ค๋ฉด N๊ณ๋จ์ผ ๋ ์ฒ ์๊ฐ ์ฌ๋ผ๊ฐ ์ ์๋ ๋ฐฉ๋ฒ์ ์๋ ๋ช๊ฐ์ง์ธ๊ฐ?
์ฝ๋
function solution(n) {
let answer = 0;
function DFS(sum) {
if(sum > n) return; //cut-edge
if(sum === n) {
answer++;
return;
}
else {
DFS(sum + 1);
DFS(sum + 2);
}
}
DFS(0);
return answer;
}
console.log(solution(7));
์ค๋ต
ํด๋น ๋ฌธ์ ๋ ๊น์ด ํ์์ผ๋ก ํธ๋ ๊ฒ์ด ์๋ ๋์ ๊ณํ๋ฒ์ ์ฌ์ฉํด์ ํธ๋ ๊ฒ์ด์๋ค.
๋์ ๊ณํ๋ฒ(Dynamic Programming)
- ์ ์ฒด ๋ฌธ์ ๋ฅผ ์์ ๋ฌธ์ ๋ก ๋จ์ํํ ๋ค์ ์ ํ์์ผ๋ก ๋ง๋ค์ด ์ฌ๊ท์ ์ธ ๊ตฌ์กฐ๋ฅผ ํ์ฉํ์ฌ ์ ์ฒด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ์
- ์ ์ฒด ๋ฌธ์ ๋ฅผ ์์ ๋ฌธ์ ๋ก ๋จ์ํ => ๋ถ๋ถ ๋ฌธ์ ๋ฅผ ์ ์
- ์ฌ๊ท์ ์ธ ๊ตฌ์กฐ๋ฅผ ํ์ฉํ ์ ์๋ ์ ํ์์ ๋ง๋ฌ => ๋ถ๋ถ ๋ฌธ์ ์์ ๋ถ์๋ ๋ด์ฉ ํ ๋๋ก ์ ํ์ ๋์ถ
- ๋ฉ๋ชจ์ด์ ์ด์ (Memoization)์ ๋์ ๊ณํ๋ฒ์์ ๋ฐ๋์ ํ์ํจ
์ฝ๋
function solution(n) {
let answer = 0;
let dy = Array.from({length: n + 1}, () => 0);
dy[1] = 1; //๋จ์ํ(๋ถ๋ถ๋ฌธ์ ์ ์)
dy[2] = 2;
for(let i = 3; i <= n; i++) {
dy[i] = dy[i - 2] + dy[i - 1]; //์ ํ์
}
answer = dy[n];
return answer;
}
console.log(solution(7));