ν°μ€ν 리 λ·°
[νλ‘κ·Έλλ¨Έμ€_μν΄λ¦¬ μ±λ¦°μ§]νΌλ‘λ
choi95 2021. 11. 7. 17:19λ¬Έμ
λ¬Έμ μ€λͺ
XXκ²μμλ νΌλ‘λ μμ€ν (0 μ΄μμ μ μλ‘ ννν©λλ€)μ΄ μμΌλ©°, μΌμ νΌλ‘λλ₯Ό μ¬μ©ν΄μ λμ μ ννν μ μμ΅λλ€. μ΄λ, κ° λμ λ§λ€ ννμ μμνκΈ° μν΄ νμν "μ΅μ νμ νΌλ‘λ"μ λμ ννμ λ§μ³€μ λ μλͺ¨λλ "μλͺ¨ νΌλ‘λ"κ° μμ΅λλ€. "μ΅μ νμ νΌλ‘λ"λ ν΄λΉ λμ μ νννκΈ° μν΄ κ°μ§κ³ μμ΄μΌ νλ μ΅μνμ νΌλ‘λλ₯Ό λνλ΄λ©°, "μλͺ¨ νΌλ‘λ"λ λμ μ ννν ν μλͺ¨λλ νΌλ‘λλ₯Ό λνλ λλ€. μλ₯Ό λ€μ΄ "μ΅μ νμ νΌλ‘λ"κ° 80, "μλͺ¨ νΌλ‘λ"κ° 20μΈ λμ μ νννκΈ° μν΄μλ μ μ μ νμ¬ λ¨μ νΌλ‘λλ 80 μ΄μ μ΄μ΄μΌ νλ©°, λμ μ ννν νμλ νΌλ‘λ 20μ΄ μλͺ¨λ©λλ€.
μ΄ κ²μμλ ν루μ ν λ²μ© ννν μ μλ λμ μ΄ μ¬λ¬κ° μλλ°, ν μ μ κ° μ€λ μ΄ λμ λ€μ μ΅λν λ§μ΄ νννλ € ν©λλ€. μ μ μ νμ¬ νΌλ‘λ kμ κ° λμ λ³ "μ΅μ νμ νΌλ‘λ", "μλͺ¨ νΌλ‘λ"κ° λ΄κΈ΄ 2μ°¨μ λ°°μ΄ dungeons κ° λ§€κ°λ³μλ‘ μ£Όμ΄μ§ λ, μ μ κ° ννν μ μλ μ΅λ λμ μλ₯Ό return νλλ‘ solution ν¨μλ₯Ό μμ±ν΄μ£ΌμΈμ.
μ νμ¬ν
- kλ 1 μ΄μ 5,000 μ΄νμΈ μμ°μμ λλ€.
- dungeonsμ μΈλ‘(ν) κΈΈμ΄(μ¦, λμ μ κ°μ)λ 1 μ΄μ 8 μ΄νμ
λλ€.
- dungeonsμ κ°λ‘(μ΄) κΈΈμ΄λ 2 μ λλ€.
- dungeonsμ κ° νμ κ° λμ μ ["μ΅μ νμ νΌλ‘λ", "μλͺ¨ νΌλ‘λ"] μ λλ€.
- "μ΅μ νμ νΌλ‘λ"λ νμ "μλͺ¨ νΌλ‘λ"λ³΄λ€ ν¬κ±°λ κ°μ΅λλ€.
- "μ΅μ νμ νΌλ‘λ"μ "μλͺ¨ νΌλ‘λ"λ 1 μ΄μ 1,000 μ΄νμΈ μμ°μμ λλ€.
- μλ‘ λ€λ₯Έ λμ μ ["μ΅μ νμ νΌλ‘λ", "μλͺ¨ νΌλ‘λ"]κ° μλ‘ κ°μ μ μμ΅λλ€.
μ μΆλ ₯ μ
kdungeonsresult
80 | [[80,20],[50,40],[30,10]] | 3 |
μ μΆλ ₯ μ μ€λͺ
νμ¬ νΌλ‘λλ 80μ λλ€.
λ§μ½, 첫 λ²μ§Έ → λ λ²μ§Έ → μΈ λ²μ§Έ λμ μμλ‘ νννλ€λ©΄
- νμ¬ νΌλ‘λλ 80μ΄λ©°, 첫 λ²μ§Έ λμ μ λκΈ°μν΄ νμν "μ΅μ νμ νΌλ‘λ" λν 80μ΄λ―λ‘, 첫 λ²μ§Έ λμ μ ννν μ μμ΅λλ€. 첫 λ²μ§Έ λμ μ "μλͺ¨ νΌλ‘λ"λ 20μ΄λ―λ‘, λμ μ ννν ν λ¨μ νΌλ‘λλ 60μ λλ€.
- λ¨μ νΌλ‘λλ 60μ΄λ©°, λ λ²μ§Έ λμ μ λκΈ°μν΄ νμν "μ΅μ νμ νΌλ‘λ"λ 50μ΄λ―λ‘, λ λ²μ§Έ λμ μ ννν μ μμ΅λλ€. λ λ²μ§Έ λμ μ "μλͺ¨ νΌλ‘λ"λ 40μ΄λ―λ‘, λμ μ ννν ν λ¨μ νΌλ‘λλ 20μ λλ€.
- λ¨μ νΌλ‘λλ 20μ΄λ©°, μΈ λ²μ§Έ λμ μ λκΈ°μν΄ νμν "μ΅μ νμ νΌλ‘λ"λ 30μ λλ€. λ°λΌμ μΈ λ²μ§Έ λμ μ ννν μ μμ΅λλ€.
λ§μ½, 첫 λ²μ§Έ → μΈ λ²μ§Έ → λ λ²μ§Έ λμ μμλ‘ νννλ€λ©΄
- νμ¬ νΌλ‘λλ 80μ΄λ©°, 첫 λ²μ§Έ λμ μ λκΈ°μν΄ νμν "μ΅μ νμ νΌλ‘λ" λν 80μ΄λ―λ‘, 첫 λ²μ§Έ λμ μ ννν μ μμ΅λλ€. 첫 λ²μ§Έ λμ μ "μλͺ¨ νΌλ‘λ"λ 20μ΄λ―λ‘, λμ μ ννν ν λ¨μ νΌλ‘λλ 60μ λλ€.
- λ¨μ νΌλ‘λλ 60μ΄λ©°, μΈ λ²μ§Έ λμ μ λκΈ°μν΄ νμν "μ΅μ νμ νΌλ‘λ"λ 30μ΄λ―λ‘, μΈ λ²μ§Έ λμ μ ννν μ μμ΅λλ€. μΈ λ²μ§Έ λμ μ "μλͺ¨ νΌλ‘λ"λ 10μ΄λ―λ‘, λμ μ ννν ν λ¨μ νΌλ‘λλ 50μ λλ€.
- λ¨μ νΌλ‘λλ 50μ΄λ©°, λ λ²μ§Έ λμ μ λκΈ°μν΄ νμν "μ΅μ νμ νΌλ‘λ"λ 50μ΄λ―λ‘, λ λ²μ§Έ λμ μ ννν μ μμ΅λλ€. λ λ²μ§Έ λμ μ "μλͺ¨ νΌλ‘λ"λ 40μ΄λ―λ‘, λμ μ ννν ν λ¨μ νΌλ‘λλ 10μ λλ€.
λ°λΌμ μ΄ κ²½μ° μΈ λμ μ λͺ¨λ ννν μ μμΌλ©°, μ μ κ° ννν μ μλ μ΅λ λμ μλ 3μ λλ€.
λ¬Έμ νμ΄
https://choi95.tistory.com/137?category=881084
μΌμ μ νμλ λμ κ΅ν λ¬Έμ μ κ°μ΄ μ¬μ©μμ λ¨μ μλ νΌλ‘λλ₯Ό κΈ°μ€μΌλ‘ κ° μλΉ νΌλ‘λμ λ°λΌ λ μ μλ μ΅λ λμ μ νμλ₯Ό λ μ μκ³ λ¦¬μ¦μ ν΅ν΄ νμ΄νμλ€.
μ½λ
function solution(k, dungeons) {
var answer = -1;
let dy = Array.from({length: k + 1}, () => 0);
for(let i = 0; i < dungeons.length; i++) {
let need = dungeons[i][0];
let spend = dungeons[i][1];
for(let j = k; j >= spend; j--) {
dy[j] = Math.max(dy[j], dy[j - spend] + 1)
}
}
answer = dy[k];
return answer;
}
μ€λ΅
μμ μΌμ΄μ€λ λͺ¨λ ν΅κ³Όνμμ§λ§ λͺ κ°μ ν μ€νΈ μΌμ΄μ€μμ μ€λ΅ μ²λ¦¬λμλ€.
μμΈμ μ°Ύμ보λ DPλ₯Ό ν΅ν΄ νκ² λλ©΄ λͺ¨λ κ²½μ° μμ λν΄μ μ²λ¦¬νμ§ λͺ»ν¨μ νμΈν μ μμλ€.
ν΄λΉ λ¬Έμ λ λμ μ λ°©λ¬Ένλ μμκ° λ³λλ‘ μ§μ λμ΄ μμ§ μλ€.
κ·Έλμ λ§μ½μ μ μ₯μ νμν νΌλ‘κ° ν° μμλλ‘ κ°λ€λ©΄ 3λ²μ§Έ λμ μ λͺ» λκΈ° λλ¬Έμ μλλ©° λ°λλ‘ μμ μμλλ‘ κ°κ² λλ€λ©΄ μ μ₯μ νμν νΌλλκ° ν° κ²μ΄ λμ€μ λμ€κΈ° λλ¬Έμ λͺ¨λ κ²½μ°μ μλ₯Ό νμ νμ§ λͺ»νλ λ¬Έμ κ° μλ€.
μ΄μ λμ μ μ§ν νμλ₯Ό depthλ‘ μ§μ νκ³ λμ μ λ°©λ¬Έ μ¬λΆμ λμ μ ν΅κ³Όν μμ μ λ¨μ νΌλ‘λλ₯Ό λ³λλ‘ κ³μ°ν΄μ£Όλ κΉμ΄ νμ(DFS)μ ν΅ν΄ λ¬Έμ λ₯Ό νμ΄ν΄μΌ λ¨μ νμΈνμλ€.
μ½λ
function solution(k, dungeons) {
let max = Number.MIN_SAFE_INTEGER;
function DFS(f, pass, nonPass) {
if (dungeons.length === pass.length + nonPass.length) {
max = max > pass.length ? max : pass.length;
} else {
for (let i = 0; i < dungeons.length; i++) {
if (!pass.includes(i) && !nonPass.includes(i)) { // λ°©λ¬Έ μ¬λΆλ₯Ό νμΈ
if (f >= dungeons[i][0]) { // λ¨μ μλ νΌλ‘λκ° λ λ§μ κ²½μ°
pass.push(i);
DFS(f - dungeons[i][1], pass, nonPass);
pass.pop();
} else { // λ¨μ μλ νΌλ‘λκ° λͺ¨μλ κ²½μ°
nonPass.push(i);
DFS(f, pass, nonPass);
nonPass.pop();
}
}
}
}
}
DFS(k, [], []);
return max;
}