π section08 - 12 - μ‘°ν©μ κ²½μ°μ (λ©λͺ¨μ΄μ μ΄μ )
λ€μ 곡μμ μ¬μ©νμ¬ μ¬κ·λ₯Ό μ΄μ©ν΄ μ‘°ν©μλ₯Ό ꡬνλ νλ‘κ·Έλ¨μ μμ±νμΈμ.

μ‘°ν©μ κ²½μ°μ μλ₯Ό ꡬνλ λ¬Έμ λ n
μ λ²μκ° 20
μ λ λμΌλ©΄ λ©λͺ¨μ΄μ μ΄μ
μΌλ‘ νμ΄μΌ νλ€. μλνλ©΄ μ°μ° μκ°μ΄ μ€λ 걸리기 λλ¬Έμ΄λ€. λ©λͺ¨μ΄μ μ΄μ
μ νλ μ΄μ λ λμΌν κ³μ°μ λ°λ³΅νμ§ μκΈ° μν¨μΈλ°, μ΄μ μ νμ°½ μ§μμΈ λ΅λ³ νλμ νμ λ νΌλ³΄λμΉ μμ΄μ ν©κ³λ₯Ό ꡬνλ μ§λ¬Έμμ λ΅νμλ€. λ¬Έμ μ μ£Όμ΄μ§ 곡μμΌλ‘ ν λ λ©λͺ¨μ΄μ μ΄μ
μ μ μ©νλ μ΄μ λ λ§μ°¬κ°μ§λ€.
κ·Έλ°λ° κΈ°μ‘΄μ μλ 곡μμ μ¬μ©ν΄λ λλλ° μλ‘μ΄ κ³΅μμ μ¬μ©νλ μ΄μ λ λκΉ?(μ΄ κ³΅μμ λλ μ²μ λ΄€λ€ π
π
) μλ₯Ό λ€μ΄ 5[1, 2, 3, 4, 5]κ°
μ€ 3κ°λ₯Ό λ½λ κ²½μ°μ μ(5C3)
λ₯Ό ꡬνλ€κ³ νμ λ λ€μκ³Ό κ°μ΄ ν μ μλ€.
- μμ μ νμ¬ λ½λ κ°μ ν¬ν¨νκ³ , λλ¨Έμ§ κ°μμ
r-1
κ°λ₯Ό λ½λ λ°©λ²(μ΄λ―Έ λ΄κ° λ½νμΌλ λλ¨Έμ§ 2κ°λ₯Ό λ½μμΌ νλ€.) - μμ μ νμ¬ λ½λ κ°μ μ μΈμν€κ³ , λλ¨Έμ§ κ°μμ
r
κ°λ₯Ό λ½λ λ°©λ²(λλ μ λ½νλ€κ³ κ°μ νκ³ λλ¨Έμ§ κ°λ€ μ€μμ 3κ°λ₯Ό λ½λλ€.)
μ΄λ κ² μ¬κ·μ μΌλ‘ μ΄μ΄λκ°λλ°, μ’
λ£ μ‘°κ±΄μ n===r || r===0
μΌ λ 1
μ 리ν΄νλ€. n
κ³Ό r
μ΄ κ°λ€λ©΄ μ«μμ μκ΄μμ΄ 1
μ΄κ³ (1C1=1
) r
μ΄ 0μ΄λ©΄ 1
(1C0=1
)μ΄κΈ° λλ¬Έμ΄λ€. λ©λͺ¨μ΄μ μ΄μ
μΌλ‘ ν λλ 2μ°¨μ λ°°μ΄μ μ μΈνλλ° λ€μκ³Ό κ°μ΄ μ μ₯λλ€. (μ½λμμλ memo
λ³μμ ν λΉ)

λ¬Έμ μ νλ¦μ κ·Έλ¦ΌμΌλ‘ κ·Έλ Έλ€.

μ½λλ λ€μκ³Ό κ°λ€.
let n = 5;
let r = 3;
console.log(solution(n, r));
function solution(n, r){
let answer;
let memo = Array.from(Array(35), () => Array(35).fill(0));
function DFS(n, r){
if (memo[n][r]) return memo[n][r];
if (n === r || r === 0) return 1;
else return memo[n][r] = DFS(n-1, r-1) + DFS(n-1, r);
}
answer = DFS(n, r);
return answer;
}
μ¬λ΄μΌλ‘ memoization
μ μ¬μ©νμ λμ μ¬μ©νμ§ μμμ λμ μ€νμκ°μ λΉκ΅νλλ° memo
λ₯Ό μ¬μ©ν λλ 0.003μ΄
, memo
λ₯Ό μ¬μ©νμ§ μμμ λλ 3.3μ΄
κ° κ±Έλ Έλ€.

let n = 33;
let r = 19;
// λ©λͺ¨μ΄μ μ΄μ
μ¬μ© μ½λ
let memo = Array.from(Array(35), ()=> (Array(35).fill(0)));
function DFS(n, r){
if (memo[n][r]) return memo[n][r];
if (n === r || r === 1) return 1;
else return memo[n][r] = DFS1(n-1, r-1) + DFS1(n-1, r);
}
console.log(DFS(n,r));
ππ½ 471435600
// λ©λͺ¨μ΄μ μ΄μ
λ―Έμ¬μ© μ½λ
function DFS(n, r){
if (n === r || r === 1) return 1;
else return DFS(n-1, r-1) + DFS(n-1, r);
}
console.log(DFS(n, r));
ππ½ 471435600
λκΈ