[JavaScript/section 10] 01 - κ³λ¨μ€λ₯΄κΈ°
π 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));