Algorithm/μΈνλ°(inflearn)
[ μλ°μ€ν¬λ¦½νΈ(JavaScript) ] section10 - 4 - λμ κ΅ν(λ μ μκ³ λ¦¬μ¦)
YWTechIT
2021. 10. 14. 10:05
728x90
π section10 - 4 - λμ κ΅ν(λ μ μκ³ λ¦¬μ¦)
λ¬Έμ : λ€μκ³Ό κ°μ΄ μ¬λ¬ λ¨μμ λμ λ€μ΄ μ£Όμ΄μ Έ μμ λ κ±°μ€λ¦λμ κ°μ₯ μ μ μμ λμ μΌλ‘ κ΅νν΄μ£Όλ €λ©΄ μ΄λ»κ² μ£Όλ©΄ λλκ°? κ° λ¨μμ λμ μ 무νμ μΈ μ μλ€.
// μ
λ ₯
3
1 2 5
15
// μΆλ ₯
// (5, 5, 5) λμ 3κ°λ‘ κ±°μ¬λ¬ μ€ μ μλ€.
3
λμ κ΅ν λ¬Έμ λ μ λ²μ dfs(λΆλΆμ§ν©) + edgeCut
μ μ΄μ©ν΄μ νΌ μ μ΄ μλ€. λ§μ½μ λμ μ μ’
λ₯κ° 100κ° μ΄μ, κ±°μ€λ¦ λμ΄ 100,000 μ΄μμΌ κ²½μ° DFS
λ‘ ν μ μλ€. μ΄λ΄ λλ DP
μμ λ
μ μκ³ λ¦¬μ¦μΌλ‘ νμ΄μΌ νλ€.
dp
λ κ±°μ¬λ¬μ€ λ(m)λ§νΌ λ°°μ΄μ ν¬κΈ°λ₯Ό μ μΈνκ³ μ΅μ λμ μ κ°μλ₯Ό ꡬν΄μΌ νλ―λ‘ κ°μλ₯Ό μ μΌ λ§μ΄ κ±°μ¬λ¬μ£Όλ κ°μλ³΄λ€ ν° κ°μΌλ‘ μ€μ νλ€.(λ¬Έμ μμ κΈμ‘μ μ΅λ 500μκΉμ§μΈλ°, λ€λ₯Έ λμ μ λΉν΄ 1μμΌλ‘ 500μμ κ±°μ¬λ¬μ£Όλ κ°μκ° μ μΌ λ§μΌλ―λ‘ 1μμ§λ¦¬ λμ 500κ°κ° νμνλ―λ‘dp
λ 500λ³΄λ€ ν° κ°μΌλ‘ μ΄κΈ°ν μν¨λ€. )dp[j]
:j
κΈμ‘μ κ±°μ¬λ¬ μ€ λ μ¬μ©λλ μ΅μ λμ μ κ°μ- ν΅μ¬ λ‘μ§: νμ¬ κ±°μ¬λ¬μ€μΌ ν λμ μ κΈμ‘λ§νΌ λΉΌμ£Όκ³ μ΄μ μ κ±°μ¬λ¬ 쀬λ λμ μ μ΅μ κ°μ + 1 (νμ¬ λ΄κ° κ±°μ¬λ¬μ£Όλ λμ μ κ°μ)
- 0μμ κ±°μ¬λ¬μ£Όλ λμ μ κ°μ
dp[0]=0
- nμμ
dp[n]
λΆν° μμνλ€.
728x90
let n = 3;
let coin = [1, 2, 5];
let change = 15;
console.log(solution(n, coin, change));
function solution(n, coin, change){
let dp = Array.from({length: change+1}, () => 1000);
dp[0]=0; // 0μμ κ±°μ¬λ¬ μ£Όλ κ²½μ°μ μ 0
for (let i=0; i<n; i++){
for (let j=coin[i]; j<=change; j++){
dp[j]=Math.min(dp[j], dp[j-coin[i]]+1);
}
}
return dp[change];
}
ππ½ 3
λ°μν