let's get IT with DAVINA π»
[μκ³ λ¦¬μ¦ μ ν] Greedy Algorithm λ³Έλ¬Έ
Greedy Algorithm (νμ μκ³ λ¦¬μ¦)
μ νμ μκ°λ§λ€ λΉμ₯ λμμ 보μ΄λ μ΅μ μ μν©λ§μ μ«μ μ΅μ’ μ μΈ ν΄λ΅μ λλ¬νλ λ°©λ²
Greedy Algorithm λ¬Έμ ν΄κ²° λ¨κ³ π½
- μ ν μ μ°¨(Selection Procedure): νμ¬ μνμμμ μ΅μ μ ν΄λ΅μ μ νν©λλ€.
- μ μ μ± κ²μ¬(Feasibility Check): μ νλ ν΄κ° λ¬Έμ μ 쑰건μ λ§μ‘±νλμ§ κ²μ¬ν©λλ€.
- ν΄λ΅ κ²μ¬(Solution Check): μλμ λ¬Έμ κ° ν΄κ²°λμλμ§ κ²μ¬νκ³ , ν΄κ²°λμ§ μμλ€λ©΄ μ ν μ μ°¨λ‘ λμκ° μμ κ³Όμ μ λ°λ³΅ν©λλ€.
- νμμ μ ν μμ±(Greedy Choice Property) : μμ μ νμ΄ μ΄νμ μ νμ μν₯μ μ£Όμ§ μμ΅λλ€.
- μ΅μ λΆλΆ ꡬ쑰(Optimal Substructure) : λ¬Έμ μ λν μ΅μ’ ν΄κ²° λ°©λ²μ λΆλΆ λ¬Έμ μ λν μ΅μ λ¬Έμ ν΄κ²° λ°©λ²μΌλ‘ ꡬμ±λ©λλ€.
→ μ΄ λκ°μ§ 쑰건μ λ§μ‘±νλ "νΉμ ν μν©"μ΄ μλλ©΄ μ΅μ μ ν΄λ₯Ό 보μ₯ν μ μλ€.
→ μ¦, νμ μκ³ λ¦¬μ¦μ νμ μ΅μ μ κ²°κ³Όλ₯Ό λμΆνλ κ²μ μλμ§λ§, μ΄λ μ λ μ΅μ μ κ·Όμ¬ν κ°μ λΉ λ₯΄κ² λμΆν μ μλ μ₯μ μ΄ μμ΅λλ€. μ΄ μ₯μ μΌλ‘ μΈν΄ νμ μκ³ λ¦¬μ¦μ κ·Όμ¬ μκ³ λ¦¬μ¦μΌλ‘ μ¬μ©ν μ μμ΅λλ€.
μμ (κ±°μ€λ¦λ)
βλ¬Έμ μν©
νλ‘λ μμ£Ό JOI μ‘νμ μμ 물건μ μ°λ€. JOI μ‘νμ μλ μλμΌλ‘ 500μ, 100μ, 50μ, 10μ, 5μ, 1μμ΄ μΆ©λΆν μκ³ , μΈμ λ κ±°μ€λ¦λ κ°μκ° κ°μ₯ μ κ² μλμ μ€λ€. νλ‘κ° JOI μ‘νμ μμ 물건μ μ¬κ³ μΉ΄μ΄ν°μμ 1000μ μ§νλ₯Ό ν μ₯ λμ λ, λ°μ μλμ ν¬ν¨λ μλμ κ°μλ₯Ό ꡬνλ νλ‘κ·Έλ¨μ μμ±νμμ€.
380μμ νλ‘κ° μ§λΆμ ν΄μΌ νλ€λ©΄ νλ‘κ° λ°μμΌ ν κ±°μ€λ¦λμ 620μμ λλ€. κ·Έλ λ€λ©΄ 500μ 1κ°, 100μ 1κ°, 10μ 2κ°λ‘ μ΄ 4κ°μ λμ μ κ±°μ¬λ¬ λ°λ κ²μ΄ κ°μ₯ μ κ² μλμ κ±°μ¬λ¬ λ°λ λ°©λ²μΌ κ²μ λλ€. κ°μ₯ μ κ² κ±°μ¬λ¬ λ°κΈ° μν λ‘μ§μ μμ±ν΄λ³΄λλ‘ νκ² μ΅λλ€.
function keepTheChange(input) {
//1000μμ§λ¦¬ μ§νλ₯Ό λλ€λ κ°μ μ΄ μκ³ , μ
λ ₯ κ°μΌλ‘λ μ§λΆν΄μΌ ν κΈμ‘μ΄ λ€μ΄μ΅λλ€.
let change = Number(1000 - input);
//μΉ΄μ΄νΈνκΈ° μν΄ λ³μ countμ 0μ ν λΉν©λλ€.
let count = 0;
//μ
λ ₯ κ°μ λ°°μ΄μ΄ λ€μ΄μ€μ§ μμΌλ―λ‘ μ§μ ν° μλ μμλλ‘ λ°°μ΄μ λ§λ€μ΄μ€λλ€.
const joiCoins = [500, 100, 50, 10, 5, 1];
//λ§λ λ°°μ΄μ κ°μλ§νΌλ§ λλ €μ€μΌ ν©λλ€.
for(let i = 0; i < joiCoins.length; i++){
//κ±°μ€λ¦λμ΄ 0μμ΄ λλ©΄ forλ¬Έμ λ©μΆ₯λλ€.
if(change === 0) break;
//κ±°μ€λ¦λκ³Ό μλμ λλ λͺ«μ μΉ΄μ΄ν
ν©λλ€.(μ°μΈ μλμ κ°μ μΉ΄μ΄ν
)
count += Math.floor(Number(change/joiCoins[i]));
//κ±°μ€λ¦λμ μλμΌλ‘ λλ λλ¨Έμ§λ₯Ό μ¬ν λΉν©λλ€.
change %= joiCoins[i];
}
//countλ₯Ό 리ν΄ν©λλ€.
return count;
}
'DEV_IN > Algorithm' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[μλ£κ΅¬μ‘°/μ νꡬ쑰] μ°κ²° 리μ€νΈ (0) | 2023.03.08 |
---|---|
[μλ£κ΅¬μ‘°/μ νꡬ쑰] λ°°μ΄ (0) | 2023.03.08 |
μκ³ λ¦¬μ¦/κ³΅κ° λ³΅μ‘λ (2) | 2023.02.24 |
μκ³ λ¦¬μ¦/μκ° λ³΅μ‘λ (0) | 2023.02.24 |
μκ³ λ¦¬μ¦μ΄λ? (2) | 2023.02.24 |
Comments