๐ 01 - ๊ณ๋จ์ค๋ฅด๊ธฐ(๋์ ๊ณํ๋ฒ)
์ฒ ์๋ ๊ณ๋จ์ ์ค๋ฅผ ๋ ํ ๋ฒ์ ํ ๊ณ๋จ ๋๋ ๋ ๊ณ๋จ์ฉ ์ฌ๋ผ๊ฐ๋ค. ๋ง์ฝ ์ด 4๊ณ๋จ์ ์ค๋ฅธ๋ค๋ฉด ๊ทธ ๋ฐฉ๋ฒ์ ์๋ 1+1+1+1, 1+1+2, 1+2+1, 2+1+1, 2+2๋ก 5๊ฐ์ง์ด๋ค.
๊ทธ๋ ๋ค๋ฉด ์ด N๊ณ๋จ์ผ ๋ ์ฒ ์๊ฐ ์ฌ๋ผ๊ฐ ์ ์๋ ๋ฐฉ๋ฒ์ ์๋ ๋ช ๊ฐ์ง์ธ๊ฐ?
๐ ํ์ด ๋ฐฉ๋ฒ(DFS, DP)
DFS ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ฌ ๋ฌธ์ ๋ฅผ ํ์ด๋ณด์๋ค. ์ ๋ต์ ํ๋ฅญํ๊ฒ๋ ์ ๋์จ๋ค ๐
ํ์ง๋ง n์ ๊ฐ์ด ์ปค์ง๋ค๋ฉด...โ ์ฐ์ฐ ํ์๊ฐ ๊ธฐํ๊ธ์์ ์ผ๋ก ์ฆ๊ฐํ๊ฒ ๋๋ค.
์ด๋ฅผ ํด๊ฒฐํ ์ ์๋ ๋ฐฉ๋ฒ์ผ๋ก ๋์ ๊ณํ๋ฒ(dynamic programming, DP)์ด ์กด์ฌํ๋ค.
function solution(n) {
let answer = 0;
function DFS(sum) {
if (sum > n) return;
if (sum === n) answer++;
else {
for (let i = 1; i <= 2; i++) {
DFS(sum + i);
}
}
}
DFS(0);
return answer;
}
console.log(solution(7));
๋์ ๊ณํ๋ฒ(dynamic programming, DP)
์ด๋ค ๋ฌธ์ ๋ฅผ ํ๊ธฐ ์ํด ๊ทธ ๋ฌธ์ ๋ฅผ ๋ ์์ ๋ฌธ์ ์ ์ฐ์ฅ์ ์ผ๋ก ์๊ฐํ๊ณ , ๊ณผ๊ฑฐ์ ๊ตฌํ ํด๋ฅผ ํ์ฉํ๋ ๋ฐฉ์์ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
์ฃผ์ด์ง ๋ถ๋ถ ๋ฌธ์ ์ ์ ๋ต์ ํ ๋ฒ๋ง ๊ณ์ฐํ๊ณ ์ ์ฅ(๋ฉ๋ชจ)ํด๋ ๋ค ๋ค์ ํ ๋ฒ ์ด ๋ถ๋ถ ๋ฌธ์ ๋ฅผ ์ด์ฉํ ๋์๋ ์ ์ฅํด๋ ์ ๋ต์ ๋ฐ๋ก ์ฐ์ถํ์ฌ ์ด์ฉํจ์ผ๋ก์จ ์๋๋ฅผ ํฅ์์ํจ๋คโ
- ์ด 7๊ณ๋จ์ ์ค๋ฅด๊ธฐ ์ํ ๋ฌธ์ ๋ฅผ ๋ ์์ ๋ฌธ์ ๋ก ๋๋์ด 1๊ณ๋จ๊ณผ 2๊ณ๋จ์ ์ค๋ฅด๊ธฐ ์ํ ๊ฒฝ์ฐ์ ์๋ฅผ ๋จผ์ ๊ตฌํ๋ค.
- 3๊ณ๋จ์ ์ค๋ฅด๊ธฐ ์ํด์๋ 1๊ณ๋จ์์ ๋ ๊ณ๋จ์ ์ค๋ฅด๋์ง 2๊ณ๋จ์์ ํ ๊ณ๋จ์ ์ค๋ฅด๋ฉด ๋๋ค.
- ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ 3๊ณ๋จ์ ์ค๋ฅด๊ธฐ ์ํ ๊ฒฝ์ฐ์ ์๋ 1๊ณ๋จ์ ์ค๋ฅด๊ธฐ ์ํ ๊ฒฝ์ฐ์ ์์ 2๊ณ๋จ๋ฅผ ์ค๋ฅด๊ธฐ ์ํ ๊ฒฝ์ฐ์ ์๋ฅผ ๋ํด์ฃผ๋ฉด ๋๋ค.
- ๋ค์๊ณผ ๊ฐ์ด dy[i] = dy[i-2] + dy[i-1] ์ ๊ฐ์ ๊ด๊ณ์์ ๋ง๋ค ์ ์๋ค.
- ๊ฒฐ๋ก ์ ์ผ๋ก dy[3]์ ๊ตฌํ๊ธฐ ์ํด์ dy[1]๊ณผ dy[2]๋ฅผ ์ด์ ์ ์ฐ์ฐ์ ํด๋๊ณ ์ ์ฅํด๋ ๋ฐฐ์ด์์ ์ฐ์ถํ์ฌ ์ด์ฉํจ์ผ๋ก์จ ์ฐ์ฐ ์๋๋ฅผ ํฅ์์ํฌ ์ ์๋ค.
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[7];
return answer;
}
console.log(solution(7));
๐ป ์ฐธ๊ณ ์ฌ์ดํธ
'Algorithm > ์ธํ๋ฐ(inflearn)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JavaScript/section 10] 03 - ์ต๋ ๋ถ๋ถ ์ฆ๊ฐ ์์ด (0) | 2022.12.21 |
---|---|
[JavaScript/section 10] 02 - ๋๋ค๋ฆฌ ๊ฑด๋๊ธฐ (0) | 2022.12.19 |
[JavaScript/section 9] 07 - ์ฌ๋๋ผ ์์ผ๋๋(BFS) (0) | 2022.11.28 |
[JavaScript/section 9] 06 - ์ฌ๋๋ผ ์์ผ๋๋(DFS) (0) | 2022.11.24 |
[JavaScript/section 9] 05 - ์ก์์ง ์ฐพ๊ธฐ (0) | 2022.11.21 |