๐ section10 - 5 - ์ต๋ ์ ์ ๊ตฌํ๊ธฐ(๋ ์ ์๊ณ ๋ฆฌ์ฆ)
๋ฌธ์ : ์ ์๋์ด ๋ด์ฃผ์ N ๊ฐ์ ๋ฌธ์ ๋ฅผ ํ๋ ค๊ณ ํ๋ค. ๊ฐ ๋ฌธ์ ๋ ๊ทธ๊ฒ์ ํ ๋ ์ป๋ ์ ์์ ํธ๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ด ์ฃผ์ด์ง๋ค. ์ ํ์๊ฐ M ์์ N ๊ฐ์ ๋ฌธ์ ์ค ์ต๋ ์ ์๋ฅผ ์ป์ ์ ์๋๋ก ํด์ผ ํ๋ค. (ํด๋น ๋ฌธ์ ๋ ํด๋น ์๊ฐ์ด ๊ฑธ๋ฆฌ๋ฉด ํธ๋ ๊ฑธ๋ก ๊ฐ์ฃผํ๋ค. ํ ์ ํ๋น ํ ๊ฐ๋ง ํ ์ ์๋ค.) ์ฒซ ๋ฒ์งธ ์ค์ ๋ฌธ์ ์ ๊ฐ์ N
๊ณผ ์ ํ ์๊ฐ M
์ด ์ฃผ์ด์ง๊ณ ๋๋ฒ์งธ ์ค๋ถํฐ N
์ค์ ๊ฑธ์ณ ๋ฌธ์ ๋ฅผ ํ ๋ ์ป๋ ์ ์์ ๋ฌธ์ ๋ฅผ ํ ๋ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ด ์ฃผ์ด์ง๋๋ค.
// ์
๋ ฅ
5 20
10 5
25 12
15 8
6 3
7 4
// ์ถ๋ ฅ
41
์ด์ ์ ๋์ผํ ๋ฌธ์ ๋ฅผ ๋ถ๋ถ์งํฉ + edgeCut์ผ๋ก ๋ฌธ์ ๋ฅผ ํ์๋ค. ํ์ง๋ง, ๋ง์ฝ์ ๋ฌธ์ ์ ๊ฐ์๊ฐ 100๊ฐ ์ด์์ด๊ฑฐ๋ ํน์ ์ ํ ์๊ฐ์ด ๋ง์์ง์๋ก ์ฌ๊ท์ ์ฐ์ฐ ํ์๊ฐ ๋์ด๋๊ธฐ ๋๋ฌธ์ DFS
๋ก ํ ์ ์๋ค. ์ด๋ด ๋๋ DP
๋
์ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ํ์ด์ผ ํ๋ค. ๋ํ, ๋
์ ์๊ณ ๋ฆฌ์ฆ์ ์ด์ฉํ๊ธฐ ์ํด ๋์ ๊ตํ ๋ฌธ์ ์ฒ๋ผ ์์์๋ถํฐ dp[j]
๋ฅผ ๋น๊ตํ๋ฉด ์ ๋๋๋ฐ ์๋ํ๋ฉด ๋์ ๋ฌธ์ ๋ ๋์ ์ ๋ฌดํ์ ์ฌ์ฉํ ์ ์์ง๋ง ์ด ๋ฌธ์ ๋ ํ ์ ํ ๋น ๋ฌธ์ ํ ๊ฐ๋ง ํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋์ ์์์๋ถํฐ ๋น๊ตํ๋ ๋ฐฉ๋ฒ๋ณด๋ค๋ ๋ค์์๋ถํฐ ๋น๊ตํ๋ฉด ์ค๋ณต์ฌ์ฉ์ ๋ง์ ์ ์๋ค.
dp[j]
:j
์๊ฐ ์์ ์ป์ ์ ์๋ ์ต๋ ์ ์ (dp[15]
: 15๋ถ ๋์ ์ป์ ์ ์๋ ์ต๋ ์ ์)- ์ฃผ์ด์ง ์๊ฐ๊น์ง
dp
๋ฅผ 0์ผ๋ก ์ด๊ธฐํํ๋ค.(์ต๋ ๊ฐ์ ๊ตฌํด์ผ ํ๊ธฐ ๋๋ฌธ์) - ๋ฌธ์ 1๊ฐ(
[10, 5]
)๋ง ํ ๋, ๋ฌธ์ 2๊ฐ๊น์ง ([10, 5], [25, 12]
) ํ ๋ ์ป์ ์ ์๋ ์ต๋ ์ ์, ๋ชจ๋ ๋ฌธ์ ๊น์ง ์ป์ ์ ์๋ ์ต๋ ์ ์ ์ด๋ ๊ฒ ๋ฒ์๋ฅผ ์ ์ฐจ ๋ํ๊ฐ๋ฉฐ ๊ตฌํ๋ค. - ๊ธฐ์กด์ ๋์ ๋ฌธ์ ๋ ๋์ ์ ๋ฌดํ์ ์ฌ์ฉํ ์ ์์ด์ ์์์๋ถํฐ ๊ตฌํ๋๋ฐ, ์ด ๋ฌธ์ ๋ ์ค๋ณต ํ์ฉ์ด ์๋๋ฏ๋ก ๋ค์์๋ถํฐ ํผ๋ค(
j=m~pt
) - ์๋ฅผ ๋ค์ด, ์ฒซ ๋ฒ์งธ ๋ฌธ์ (
[10, 5]
)์ ๋ ๋ฒ์งธ ๋ฌธ์ ([25, 12]
)๋ก ์ ํ ์๊ฐ๋ด์ ๋ฌธ์ ๋ฅผ ํ ๋์ ์ต๋ ์ ์๋ฅผ ๊ตฌํ ๋ ํ์ฌps=25, pt=12
๋ผ๊ณ ํ๋ค๋ฉดm=20
์ด๋ฏ๋ก ๋งจ ์ฒ์์20
๋ถํฐ ์์ํ๋ค.20-12=8
์ด๊ณ (์ฌ๊ธฐ์ ๊ฐ์ ๋นผ์ฃผ๋ ์ด์ ๋ ํ์ฌ ๋ฌธ์ ๋ฅผ ํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ํ์ฌ ๋ฌธ์ ๋ฅผ ํ๊ธฐ ์ด์ ์ ์ต๋ ์ ์๋ฅผ ๊ฐ์ ธ์ค๊ธฐ ์ํจ์ด๋ค.) ์ด๋8
๋ถ์ผ๋ก ์ป์๋ ์ต๋ ์ ์๋10์
์ด๋ค. ์ฌ๊ธฐ์ ์ง๊ธ ํธ๋ ๋ฌธ์ ์ ์ ์(ps=25
)๋ฅผ ๋ํ ๊ฐ์ ์ ์ฉํ๋ฉดdp[20]=35
๊ฐ ๋๋ค. - ์ต๋ ์ ์๋ฅผ ๊ตฌํ๊ธฐ ๋๋ฌธ์์ ๊ธฐ์กด ์ ์์ ์๋ก ํผ ์ ์๋ฅผ ๋น๊ตํด์ ๋ ํฐ ๊ฐ์
dp
์ ๋ฃ์.(Math.max ์ด์ฉ) - ํ๋จ์ ์๋ก์ด ๋ฌธ์ ๋ฅผ ํ ๋๋ง๋ค ์ต๋ ์ ์๋ฅผ ๊ธฐ๋กํ๊ณ ์๋
dp
๋ฅผ ์ถ๋ ฅํ๋ค. ํญ์ ์๋ก์ด ๋ฌธ์ ๋ฅผ ํ ๋๋ง๋ค ์ต๋์ ์๋ก ๊ฐฑ์ ๋๋ ๊ฒ์ด ์๋๋ผ๋ ๊ฒ์ ์ผ๋์ ๋์.
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 dp = Array.from({length: m+1}, ()=> 0);
for (let i of arr){
let ps = i[0];
let pt = i[1];
for (let j=m; j>=pt; j--){
dp[j] = Math.max(dp[j], dp[j-pt]+ps);
}
console.log(dp)
}
return dp[m];
}
๐๐ฝ
ps= 10 pt= 5 [
0, 0, 0, 0, 0, 10, 10,
10, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10
]
ps= 25 pt= 12 [
0, 0, 0, 0, 0, 10, 10,
10, 10, 10, 10, 10, 25, 25,
25, 25, 25, 35, 35, 35, 35
]
ps= 15 pt= 8 [
0, 0, 0, 0, 0, 10, 10,
10, 15, 15, 15, 15, 25, 25,
25, 25, 25, 35, 35, 35, 40
]
ps= 6 pt= 3 [
0, 0, 0, 6, 6, 10, 10,
10, 16, 16, 16, 21, 25, 25,
25, 31, 31, 35, 35, 35, 41
]
ps= 7 pt= 4 [
0, 0, 0, 6, 7, 10, 10,
13, 16, 17, 17, 21, 25, 25,
25, 31, 32, 35, 35, 38, 41
]
41
๋๊ธ