[ μλ°μ€ν¬λ¦½νΈ(JavaScript) ] section08 - 7 - μ΅λμ μ ꡬνκΈ°(DFS)
π section08 - 7 - μ΅λμ μ ꡬνκΈ°(DFS)
μ νμκ° M
μμ N
κ°μ λ¬Έμ μ€ μ΅λμ μλ₯Ό μ»μ μ μλλ‘ κ΅¬νλ λ¬Έμ λ€. μ²μ λ¬Έμ λ₯Ό λ΄€μ λ νμμ€ λ°°μ λ¬Έμ μ λΉμ·ν μ€ μμλλ°, 그리λλ‘λ ν μ μμλ€. μ μλ₯Ό λμ μμΌλ‘ μ λ ¬(sort)
ν λ€μ μμλλ‘ νλ©΄ μ ν μκ° μμ μ΅λ μ μλ₯Ό μ»μ μ μμ§ μλ?λΌκ³ μκ°νλλ° κ·Έκ²λ³΄λ€, λͺ¨λ κ²½μ°μ μ(λΆλΆμ§ν©
)λ₯Ό ꡬν΄μ M
λ³΄λ€ μμΌλ©΄μ λμμ μ΅λ μ μλ₯Ό κ°±μ νλ©΄ λλ λ¬Έμ μλ€.
μ¬κΈ°μ λͺ¨λ κ²½μ°μ μλ₯Ό ꡬνμ§ μκ³ edgeCut(κ°μ§μΉκΈ°)
μ μ΄μ©νλλ° νμ¬κΉμ§ λμ λ μκ°μ΄ M
λ³΄λ€ ν¬λ€λ©΄ λ μ΄μ κ³μ° ν νμ μμ΄ return
νλ μ½λλ₯Ό μΆκ°νλ€. μ’
λ£ μ‘°κ±΄μ L===n
μΈλ°, λ¬Έμ λ ν μ νλΉ ν κ°μ©λ§ ν μ μκΈ° λλ¬Έμ νλμ© λͺ¨λ μ¬μ©νμ λ μ΅λ L(level)
μ N
μ΄ λκΈ°λλ¬Έμ΄λ€. νλ¨μ DFS
μ κ·Έλ¦Όμ μ°Έκ³ νμ. λͺ¨λ κ²½μ°μ μλ₯Ό κ·Έλ¦¬μ§ μκ³ , μ΄λ κ² λ¬Έμ μ μ μλ₯Ό λμ ν΄κ°λ€λ κ²μ νννλ€.
let n = 5;
let m = 20;
let arr = [[10, 5], [25, 12], [15, 8], [6, 3], [7, 4]];
console.log(solution(n, m, arr));
function solution(n, m, arr){
let answer=Number.MIN_SAFE_INTEGER;
function DFS(L, sum, time){
if (time > m) return;
if (L === n){
answer = Math.max(answer, sum);
}else{
DFS(L+1, sum+arr[L][0], time+arr[L][1]);
DFS(L+1, sum, time);
}
}
DFS(0, 0, 0);
return answer;
}