[Java] ๋™์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ(DP, Dynamic Programming) / ๋ฐฑ์ค€ 12865๋ฒˆ / ๋ฐฐ๋‚ญ ๋ฌธ์ œ

2025. 11. 13. 09:54ยทโ˜•Java/์ฝ”๋”ฉํ…Œ์ŠคํŠธ

 

DP๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์‹ค๋งˆ๋ฆฌ๋ฅผ ์žก๊ณ  ์‹ถ๋‹ค๋ฉด

์œ„ ์˜์ƒ์„ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’ก ๋ฐฑ์ค€ 12865๋ฒˆ

๐Ÿ”– # ๋ฌธ์ œ : ํ’€๋Ÿฌ๊ฐ€๊ธฐ ๐Ÿ”—

 

์ด ๋ฌธ์ œ๋Š” ์•„์ฃผ ํ‰๋ฒ”ํ•œ ๋ฐฐ๋‚ญ์— ๊ด€ํ•œ ๋ฌธ์ œ์ด๋‹ค.

ํ•œ ๋‹ฌ ํ›„๋ฉด ๊ตญ๊ฐ€์˜ ๋ถ€๋ฆ„์„ ๋ฐ›๊ฒŒ ๋˜๋Š” ์ค€์„œ๋Š” ์—ฌํ–‰์„ ๊ฐ€๋ ค๊ณ  ํ•œ๋‹ค. ์„ธ์ƒ๊ณผ์˜ ๋‹จ์ ˆ์„ ์Šฌํผํ•˜๋ฉฐ ์ตœ๋Œ€ํ•œ ์ฆ๊ธฐ๊ธฐ ์œ„ํ•œ ์—ฌํ–‰์ด๊ธฐ ๋•Œ๋ฌธ์—, ๊ฐ€์ง€๊ณ  ๋‹ค๋‹ ๋ฐฐ๋‚ญ ๋˜ํ•œ ์ตœ๋Œ€ํ•œ ๊ฐ€์น˜ ์žˆ๊ฒŒ ์‹ธ๋ ค๊ณ  ํ•œ๋‹ค.

์ค€์„œ๊ฐ€ ์—ฌํ–‰์— ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” N๊ฐœ์˜ ๋ฌผ๊ฑด์ด ์žˆ๋‹ค. ๊ฐ ๋ฌผ๊ฑด์€ ๋ฌด๊ฒŒ W์™€ ๊ฐ€์น˜ V๋ฅผ ๊ฐ€์ง€๋Š”๋ฐ, ํ•ด๋‹น ๋ฌผ๊ฑด์„ ๋ฐฐ๋‚ญ์— ๋„ฃ์–ด์„œ ๊ฐ€๋ฉด ์ค€์„œ๊ฐ€ V๋งŒํผ ์ฆ๊ธธ ์ˆ˜ ์žˆ๋‹ค. ์•„์ง ํ–‰๊ตฐ์„ ํ•ด๋ณธ ์ ์ด ์—†๋Š” ์ค€์„œ๋Š” ์ตœ๋Œ€ K๋งŒํผ์˜ ๋ฌด๊ฒŒ๋งŒ์„ ๋„ฃ์„ ์ˆ˜ ์žˆ๋Š” ๋ฐฐ๋‚ญ๋งŒ ๋“ค๊ณ  ๋‹ค๋‹ ์ˆ˜ ์žˆ๋‹ค. ์ค€์„œ๊ฐ€ ์ตœ๋Œ€ํ•œ ์ฆ๊ฑฐ์šด ์—ฌํ–‰์„ ํ•˜๊ธฐ ์œ„ํ•ด ๋ฐฐ๋‚ญ์— ๋„ฃ์„ ์ˆ˜ ์žˆ๋Š” ๋ฌผ๊ฑด๋“ค์˜ ๊ฐ€์น˜์˜ ์ตœ๋Œ“๊ฐ’์„ ์•Œ๋ ค์ฃผ์ž.

 

โŒจ๏ธ # ์ž…๋ ฅ

 

์ฒซ ์ค„์— ๋ฌผํ’ˆ์˜ ์ˆ˜ N(1 ≤ N ≤ 100)๊ณผ ์ค€์„œ๊ฐ€ ๋ฒ„ํ‹ธ ์ˆ˜ ์žˆ๋Š” ๋ฌด๊ฒŒ K(1 ≤ K ≤ 100,000)๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋‘ ๋ฒˆ์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์— ๊ฑฐ์ณ ๊ฐ ๋ฌผ๊ฑด์˜ ๋ฌด๊ฒŒ W(1 ≤ W ≤ 100,000)์™€ ํ•ด๋‹น ๋ฌผ๊ฑด์˜ ๊ฐ€์น˜ V(0 ≤ V ≤ 1,000)๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.

์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง€๋Š” ๋ชจ๋“  ์ˆ˜๋Š” ์ •์ˆ˜์ด๋‹ค.

 

๐Ÿ–จ๏ธ # ์ถœ๋ ฅ


ํ•œ ์ค„์— ๋ฐฐ๋‚ญ์— ๋„ฃ์„ ์ˆ˜ ์žˆ๋Š” ๋ฌผ๊ฑด๋“ค์˜ ๊ฐ€์น˜ํ•ฉ์˜ ์ตœ๋Œ“๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

์ด ๋ฌธ์ œ๋Š” ๋Œ€ํ‘œ์ ์ธ ๋ฐฐ๋‚ญ(knapsack) ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

๋ฌด๊ฒŒ ์ œํ•œ์ด ์ฃผ์–ด์ง„ ๋ฐฐ๋‚ญ์— ์—ฌ๋Ÿฌ ๋ฌผ๊ฑด์„ ๋„ฃ์–ด ์ด ๊ฐ€์น˜๋ฅผ ์ตœ๋Œ€๋กœ ๋งŒ๋“œ๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

 

๋ฐฐ๋‚ญ ๋ฌธ์ œ์—์„œ๋Š”
1. ์ง์„ ์ชผ๊ฐœ์–ด(ํ•œ ์ง์˜ ์ „์ฒด๊ฐ€ ์•„๋‹Œ ์ผ๋ถ€๋งŒ) ๋„ฃ์„ ์ˆ˜ ์žˆ๋Š” ์œ ํ˜•์ด ์žˆ๊ณ  (Fractional ์œ ํ˜•์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.)

2. ์ง์„ ์ชผ๊ฐœ์–ด ๋„ฃ์„ ์ˆ˜ ์—†๋Š” ์œ ํ˜•์ด ์žˆ์Šต๋‹ˆ๋‹ค. (๋„ฃ๊ฑฐ๋‚˜ ๋ง๊ฑฐ๋‚˜, 0-1 ์œ ํ˜•์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.)

 

๋ณดํ†ต ์ฒซ ๋ฒˆ์งธ ์œ ํ˜•์—์„œ๋Š” ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์“ฐ๊ณ , ๋‘ ๋ฒˆ์งธ ์œ ํ˜•์—์„œ๋Š” DP๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฒˆ ๋ฌธ์ œ ์—ญ์‹œ ์ง์„ ์ชผ๊ฐœ ๋„ฃ์„ ์ˆ˜ ์—†๋Š” ๋ฌธ์ œ๋กœ, DP๋ฅผ ์‚ฌ์šฉํ•ด ํ’€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

DP(๋™์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ)๋กœ ํ’€๊ธฐ

์ด DP๋ž€ ๋ฌด์—‡์ผ๊นŒ์š”?

ํฐ ๋ฌธ์ œ๋ฅผ ์ž‘์€ ๋ฌธ์ œ๋กœ ์ชผ๊ฐœ์„œ,
๊ฒน์น˜๋Š” ๋ถ€๋ถ„ ๋ฌธ์ œ์˜ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•˜๊ณ  ์žฌํ™œ์šฉํ•˜๋Š” ๋ฐฉ์‹

์˜ˆ๋ฅผ ๋“ค์–ด ํ”ผํฌ๋‚˜์น˜ ์ˆ˜์—ด `f(n) = f(n-1) + f(n-2)`๋ผ๊ณ  ํ•  ๋•Œ

n๋ฒˆ์งธ ํ•ญ์„ ๊ตฌํ•  ๋•Œ n-2๋ฒˆ์งธ ํ•ญ๋“ค์€ ์ด๋ฏธ ๊ณ„์‚ฐ์„ ํ–ˆ์„ ๊ฒ๋‹ˆ๋‹ค. ๋งค๋ฒˆ ์ƒˆ๋กญ๊ฒŒ ๊ณ„์‚ฐํ•  ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค.

์ด์ฒ˜๋Ÿผ ๋˜‘๊ฐ™์€ ๊ฐ’์„ ์—ฌ๋Ÿฌ ๋ฒˆ ๊ณ„์‚ฐํ•˜์ง€ ์•Š๊ธฐ ์œ„ํ•ด ์ €์žฅํ•ด๋‘๋Š” ๊ฒƒ์ด DP์ž…๋‹ˆ๋‹ค.

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ์—์„œ ๊ธฐ๋ณธ์ ์ธ DP๋ฅผ ํ‘ธ๋Š” ๊ณต์‹์„ ๋‚˜๋ฆ„๋Œ€๋กœ ์„ธ์›Œ๋ดค์Šต๋‹ˆ๋‹ค.

 

<๐Ÿ’ก DP ๋ฌธ์ œ ํ‘ธ๋Š” ๊ณต์‹>

1. ํฐ ๋ฌธ์ œ์™€ ์ž‘์€ ๋ฌธ์ œ ์ •์˜ํ•˜๊ธฐ
2. 2์ฐจ์› ๋ฐฐ์—ด๊ณผ ๊ฐ™์€ DP ํ‘œ ๋งŒ๋“ค๊ธฐ

3. ์ ํ™”์‹ ์„ธ์šฐ๊ธฐ(์ž‘์€ ๋ฌธ์ œ๋ฅผ ์ด์šฉํ•ด ํฐ ๋ฌธ์ œ๋ฅผ ํ’€ ์ˆ˜ ์žˆ๋„๋ก)
4. ์ ํ™”์‹์— ๋”ฐ๋ผ DP ํ‘œ ์ฑ„์›Œ๊ฐ€๊ธฐ
4. ํ‘œ๋ฅผ ๋ณด๊ณ  ๋‹ต ์ฐพ๊ธฐ

 

๋ฐฑ์ค€ 12865๋ฒˆ์—์„œ

ํฐ ๋ฌธ์ œ๋Š” ๋ฌธ์ œ ๊ทธ ์ž์ฒด์ธ, N๊ฐœ์˜ ๋ฌผ๊ฑด ์ค‘ ์ผ๋ถ€๋ฅผ ๊ณจ๋ผ์„œ ์ด ๋ฌด๊ฒŒ <= k์ธ ๋ฐฐ๋‚ญ์— ๋„ฃ์—ˆ์„ ๋•Œ ๊ฐ€์น˜์˜ ์ตœ๋Œ“๊ฐ’์ž…๋‹ˆ๋‹ค.

์ด ํฐ ๋ฌธ์ œ๋ฅผ ์—ฌ๋Ÿฌ ๋ฌธ์ œ๋กœ ๋‚˜๋ˆ„์–ด ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋•Œ ์ž‘์€ ๋ฌธ์ œ๋Š” ๊ฐ ์ง์— ์ˆœ์„œ๋ฅผ ๋งค๊ฒจ๋‘๊ณ , ์ฒซ๋ฒˆ์งธ๋ถ€ํ„ฐ i๋ฒˆ์งธ๊นŒ์ง€ ๋ฌผ๊ฑด ์ค‘์— ๊ณ ๋ คํ–ˆ์„ ๋•Œ ๋ฌด๊ฒŒ ์ œํ•œ์„ ์ง€ํ‚ค๋ฉด์„œ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ๊ฐ€์น˜๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

(์ฒซ๋ฒˆ์งธ๋ถ€ํ„ฐ i๋ฒˆ์งธ๊นŒ์ง€ ๋ฌผ๊ฑด์„ ๋‹ค ๋„ฃ๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ ๊ทธ ์ค‘์—์„œ ๊ฐ€์น˜๊ฐ€ ๊ฐ€์žฅ ํฐ ์กฐํ•ฉ์œผ๋กœ ๊ตฌํ•œ ๊ฐ€์น˜์˜ ๊ฐ’๋งŒ ๊ธฐ์–ตํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.)

 

์ฆ‰, ๋งค๋ฒˆ "์ด ๋ฌผ๊ฑด์„ ๋„ฃ์„๊นŒ? ๋ง๊นŒ?"๋ฅผ ๊ฐ€์น˜์˜ ์ดํ•ฉ์„ ๊ธฐ์ค€์œผ๋กœ ๊ฒฐ์ •ํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

์ž‘์€ ๋ฌธ์ œ๋ฅผ ํ’€์–ด์„œ ๊ตฌํ•œ ๊ฐ’๋“ค์„ ์ €์žฅํ•ด๊ฐ€๋ฉฐ ํฐ ๋ฌธ์ œ๋ฅผ ํ’‰๋‹ˆ๋‹ค.


์•ž์—์„œ ํ‘ผ ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ๊ณณ์ด ๋ฐ”๋กœ DP ํ‘œ์ž…๋‹ˆ๋‹ค.

๋ณดํ†ต 2์ฐจ์› ๋ฐฐ์—ด ํ˜•ํƒœ๋กœ ๋งŽ์ด ํ•ฉ๋‹ˆ๋‹ค.

 

์šฐ๋ฆฌ๊ฐ€ ๊ตฌํ•ด์•ผํ•˜๋Š” ๊ฑด ๊ฐ€์น˜์˜ ์ตœ๋Œ“๊ฐ’์ด๋‹ˆ๊นŒ, ๊ฐ ์›์†Œ๋Š” ๊ฐ€์น˜์˜ ํ•ฉ์ด๋ผ๊ณ  ํ•ฉ์‹œ๋‹ค.

์ด๋•Œ ์กฐ๊ฑด์ด 1~i๋ฒˆ์งธ ๋ฌผ๊ฑด๊นŒ์ง€ ๊ณ ๋ คํ–ˆ์„ ๋•Œ, ๋ฌด๊ฒŒ ์ œํ•œ w๋ฅผ ์ง€ํ‚ค๋ฉด์„œ๋‹ˆ๊นŒ

ํ–‰์„ ๋ฌผ๊ฑด, ์—ด์„ ํ˜„์žฌ ๋„ฃ์„ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ๋ฌด๊ฒŒ๋ผ๊ณ  ๊ณ ๋ คํ•ด๋ด…์‹œ๋‹ค.

 

๋ฌผ๊ฑด์€ ์ตœ๋Œ€ N๊ฐœ์ด๋‹ˆ 1๋ฒˆ ๋ฌผ๊ฑด๋ถ€ํ„ฐ N๋ฒˆ ๋ฌผ๊ฑด๊นŒ์ง€ ์žˆ์„ ๊ฒ๋‹ˆ๋‹ค.

๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค๋ฅผ ๊ณ ๋ คํ•˜์—ฌ 0๋ฒˆ ๋ฌผ๊ฑด๋ถ€ํ„ฐ N-1๋ฒˆ ๋ฌผ๊ฑด๊นŒ์ง€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ์‹œ๋‹ค.

ํ–‰(row) ์˜๋ฏธ
i(0~N-1) ๋ฌผ๊ฑด i๋ฒˆ์งธ๊นŒ์ง€ ๊ณ ๋ ค
w(0~k) ํ˜„์žฌ ๋ฐฐ๋‚ญ ๋ฌด๊ฒŒ ์ œํ•œ

 

์ฆ‰, dp[i][w] = "์•ž์—์„œ๋ถ€ํ„ฐ i๋ฒˆ์งธ ๋ฌผ๊ฑด๊นŒ์ง€ ์กฐํ•ฉ์„ ๊ณ ๋ คํ–ˆ์„ ๋•Œ ๋ฌด๊ฒŒ w ์ดํ•˜๋กœ ๋„ฃ์„ ๋•Œ ์ตœ๋Œ€ ๊ฐ€์น˜"๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.


๊ทธ๋Ÿผ ์ด DP ํ‘œ๋ฅผ ์ฑ„์›Œ๋‚˜๊ฐ€๊ธฐ ์œ„ํ•œ ๊ทœ์น™, ์ ํ™”์‹์„ ์„ธ์›Œ๋ด…์‹œ๋‹ค.

 

๊ฐ ๋ฌผ๊ฑด์˜ ๋ฌด๊ฒŒ์™€ ๊ฐ€์น˜๊ฐ€ ์ˆœ์„œ๋Œ€๋กœ ๊ฐ๊ฐ W, V ๋ฐฐ์—ด์— ์ €์žฅ๋˜์–ด ์žˆ๋‹ค๊ณ  ํ•ฉ์‹œ๋‹ค.

 

ํ•ต์‹ฌ์ ์ธ ๋‚ด์šฉ์€, "i๋ฒˆ์งธ ๋ฌผ๊ฑด์„ ๋„ฃ์„๊นŒ, ๋ง๊นŒ?"์ž…๋‹ˆ๋‹ค.

  • i๋ฒˆ์งธ ๋ฌผ๊ฑด์ด ์ตœ๋Œ€ ๋ฌด๊ฒŒ ์ œํ•œ๋ณด๋‹ค ์ปค์„œ ๋„ฃ์„ ์ˆ˜ ์—†๋‹ค๋ฉด
    •  ๊ฐ€์น˜๊ฐ€ ์ถ”๊ฐ€๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค = ์ด์ „ i-1๋ฒˆ์งธ๊นŒ์ง€ ์–ป์€ ์ตœ๋Œ€์น˜ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค๋ฉด, ๋„ฃ์—ˆ์„ ๋•Œ์™€ ์•ˆ ๋„ฃ์—ˆ์„ ๋•Œ ๋” ์ข‹์€ ๊ฒฝ์šฐ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
    • ์ด ๋ฌผ๊ฑด์„ ๋„ฃ์„ ๋•Œ, ๊ฐ€์น˜๊ฐ€ ์ตœ๋Œ€๊ฐ€ ๋œ๋‹ค๋ฉด
      • ์ „์ฒด ๋ฌด๊ฒŒ์—์„œ ์ด ๋ฌผ๊ฑด์˜ ๋ฌด๊ฒŒ๋ฅผ ๋นผ๊ณ  ๋‚จ์€ ๋ฌด๊ฒŒ์—์„œ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€์น˜๋ฅผ ์ฐพ๊ณ , ๊ทธ ๊ฐ’์— ํ˜„์žฌ ๋ฌผ๊ฑด์˜ ๊ฐ€์น˜๋ฅผ ๋”ํ•œ๋‹ค
    • ์ด ๋ฌผ๊ฑด์„ ๋„ฃ์„ ๋•Œ, ๊ฐ€์น˜๊ฐ€ ์ตœ๋Œ€๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด
      • ์ด์ „ i-1๋ฒˆ์งธ๊นŒ์ง€ ์–ป์€ ์ตœ๋Œ€์น˜ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
    • ์œ„ ๋‘˜ ์ค‘ ๋” ํฐ ๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
if(W[i] > w) {	// i๋ฒˆ์งธ ๋ฌผ๊ฑด์„ ๋ฐฐ๋‚ญ์— ๋„ฃ์„ ์ˆ˜ ์žˆ๋Š”๊ฐ€? = ๋ฌด๊ฒŒ ์ œํ•œ์„ ์ง€ํ‚ค๋Š”๊ฐ€
	// ๋ชป ๋„ฃ๋Š”๋‹ค๋ฉด ์ด์ „ i-1๋ฒˆ์งธ ๋ฌผ๊ฑด๊นŒ์ง€ ๊ณ ๋ คํ•œ ์ตœ๋Œ€์น˜์™€ ๋˜‘๊ฐ™์ด
	dp[i][w] = dp[i-1][w];	
} else {
	// ๋ฌผ๊ฑด์„ ๋„ฃ๊ฒŒ ๋œ๋‹ค๋ฉด 2๊ฐ€์ง€ ๊ฒฝ์šฐ ์ค‘ ๋” ํฐ ๊ฐ’์œผ๋กœ
    // i๋ฒˆ์งธ ๋ฌผ๊ฑด์„ ๋„ฃ๋Š” ๊ฒฝ์šฐ -> ๋‚จ์€ ๋ฌด๊ฒŒ(w-W[i]) ์ œํ•œ์„ ์ง€ํ‚ค๋ฉด์„œ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ํฐ ๊ฐ€์น˜ + i๋ฒˆ์งธ ๋ฌผ๊ฑด์˜ ๊ฐ€์น˜
    // i๋ฒˆ์งธ ๋ฌผ๊ฑด์„ ์•ˆ ๋„ฃ๋Š” ๊ฒฝ์šฐ > i-1๋ฒˆ์งธ ๋ฌผ๊ฑด๊นŒ์ง€ ๊ณ ๋ คํ•œ ๊ฒฝ์šฐ์™€ ๋™์ผํ•œ ๊ฐ’์œผ๋กœ
	dp[i][w] = max(dp[i-1][w], dp[i-1][w-W[i]] + V[i]);
}

 

์ดํ•ด๊ฐ€ ์•ˆ ๋œ๋‹ค๋ฉด ์˜ˆ์‹œ๋ฅผ ๋ณด๋ฉด์„œ ์ดํ•ดํ•ด๋ณด์„ธ์š” ใ…Žใ…Ž


์œ„์—์„œ ์„ธ์šด ์ ํ™”์‹์œผ๋กœ ํ‘œ๋ฅผ ์ฑ„์›Œ๋‚˜๊ฐ‘๋‹ˆ๋‹ค.

์ฝ”๋”ฉํ…Œ์ŠคํŠธ๋ฅผ ํ’€ ๋•Œ๋Š” ๋ฐ”๋กœ ์ฝ”๋“œ๋กœ ๋‚˜ํƒ€๋‚ด๋ฉด ๋˜์ง€๋งŒ, ์šฐ๋ฆฌ๊ฐ€ ์„ธ์šด ์ ํ™”์‹์ด ๋งž๋Š”์ง€ ํ™•์ธํ•  ๊ฒธ

๊ทธ๋ฆผ์œผ๋กœ ๊ทธ๋ ค๋ด…๋‹ˆ๋‹ค.

 

๋‹ค์Œ ์˜ˆ์ œ๋ฅผ ์‚ฌ์šฉํ•ด๋ด…์‹œ๋‹ค.

 

ํ‘œ๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

ํ–‰์—๋Š” ์–ด๋–ค ๋ฌผ๊ฑด์„ ๋„ฃ์—ˆ๋Š”์ง€ ์œ„ํ•ด i๋ฒˆ์งธ ๋ฌผ๊ฑด์„, ์—ด์—๋Š” ๋ฌด๊ฒŒ๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

์ตœ๋Œ€ ๊ฐ€๋Šฅํ•œ ๋ฌด๊ฒŒ๊ฐ€ 0์ผ ๋•Œ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๊ฐ€์น˜๋ถ€ํ„ฐ ๋ชฉํ‘œ์ธ 7์ผ ๋•Œ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๊ฐ€์น˜๊นŒ์ง€ ๋ชจ๋‘ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.

๋ฌด๊ฒŒ๊ฐ€ 0์ด๊ฑฐ๋‚˜ 1 ๋˜๋Š” 2์ผ ๋•Œ๋Š” ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๋ฌผ๊ฑด์ด ์—†์–ด 0์œผ๋กœ ๋ฏธ๋ฆฌ ์ฑ„์›Œ๋†จ์Šต๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿผ ์ตœ๋Œ€ ๋ฌด๊ฒŒ w=3์ผ ๋•Œ๋Š” ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”?

2๋ฒˆ์งธ ๋ฌผ๊ฑด์ด ๋ฌด๊ฒŒ๊ฐ€ 3์œผ๋กœ ๋ฐฐ๋‚ญ์— ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

 

๊ทธ๋ ‡๋‹ค๋ฉด 2๋ฒˆ์งธ ๋ฌผ๊ฑด์„ ๋„ฃ์—ˆ์„ ๋•Œ ์ตœ๋Œ“๊ฐ’์„ ๊ตฌํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๋ฌด๊ฒŒ๊ฐ€ 3์ผ ๋•Œ 1๋ฒˆ์งธ ๋ฌผ๊ฑด๊นŒ์ง€ ๊ณ ๋ คํ•œ ์ตœ๋Œ€์น˜๋Š” 0์ด๊ณ ,

๋‚จ์€ ๋ฌด๊ฒŒ 0์œผ๋กœ 2๋ฒˆ์งธ ๋ฌผ๊ฑด๊นŒ์ง€ ๊ณ ๋ คํ–ˆ์„ ๋•Œ์— ํ˜„์žฌ 2๋ฒˆ์งธ ๋ฌผ๊ฑด์˜ ๊ฐ’์„ ๋”ํ•œ ๊ฐ’์€ 6์ด๋ฏ€๋กœ ๋” ํฐ 6์ด ์ฑ„์›Œ์ง‘๋‹ˆ๋‹ค.

if(W[i] > w) {
	dp[i][w] = dp[i-1][w];	
} else {
	dp[i][w] = max(dp[i-1][w], dp[i-1][w-[W[i]] + V[i]);
}

---------------------------------------------------

i = 2, w = 3;
W[i] = 3, V[i] = 6;

if(W[2] > 3) {
	dp[2][3] = dp[1][3];	
} else {
	dp[2][3] = max(dp[1][3], dp[1][3-3] + 6);
}

3๋ฒˆ์งธ ๋ฌผ๊ฑด์„ ๋„ฃ์„ ๋•Œ๋Š”

๋ฌด๊ฒŒ๊ฐ€ 5์ธ ๋ฌผ๊ฑด์„ ๋„ฃ์„ ์ˆ˜ ์—†์œผ๋‹ˆ 2๋ฒˆ์งธ ๋ฌผ๊ฑด๊นŒ์ง€ ๊ณ ๋ คํ–ˆ์„ ๋•Œ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ“๊ฐ’์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

 

์•ž์—์„œ ํ•˜๋˜ ๊ฒƒ์ฒ˜๋Ÿผ dp[1][4]๊นŒ์ง€ ์ฑ„์›๋‹ˆ๋‹ค.

 

2๋ฒˆ์งธ ๋ฌผ๊ฑด๋„ 1๋ฒˆ์งธ ๋ฌผ๊ฑด์ฒ˜๋Ÿผ ๋ฐฐ๋‚ญ์— ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌ๋ฉด ์–ด๋–ค ๊ฐ’์ด ์ตœ๋Œ€์ธ์ง€ ๋น„๊ตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด์ „ 1๋ฒˆ์งธ ๋ฌผ๊ฑด๊นŒ์ง€ ๊ณ ๋ คํ–ˆ์„ ๋•Œ ๊ฐ’ = 8 vs ํ˜„์žฌ ๋ฌผ๊ฑด์˜ ๊ฐ€์น˜(6) + ๋‚จ์€ ๋ฌด๊ฒŒ 1์—์„œ 1๋ฒˆ์งธ ๋ฌผ๊ฑด๊นŒ์ง€ ๊ณ ๋ คํ–ˆ์„ ๋•Œ ์ตœ๋Œ€์น˜(dp[1][0]) = 6 ์œผ๋กœ max = 8์ด ๋ฉ๋‹ˆ๋‹ค.

 

์ตœ์ข…์ ์œผ๋กœ ์ฑ„์›Œ์ง„ ํ‘œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋‹ต์€ ๋ฌด๊ฒŒ 7์—์„œ 3๋ฒˆ์งธ ๋ฌผ๊ฑด๊นŒ์ง€ ๋ชจ๋‘ ๊ณ ๋ คํ•œ ๊ฐ€์น˜์˜ ์ตœ๋Œ€์น˜ 14๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.


์ฝ”๋“œ๋กœ ์ž‘์„ฑํ•ด๋ดค์Šต๋‹ˆ๋‹ค.

import java.util.*;
import java.lang.Math;

public class Main {
  public static void main(String[] args) {
    // ์ดˆ๊ธฐ ์ž…๋ ฅ
    Scanner sc = new Scanner(System.in);
    int itemNumbers = sc.nextInt();
    int maxWeight = sc.nextInt();
    int[] itemWeights = new int[itemNumbers];
    int[] itemValues = new int[itemNumbers];

    for(int i=0; i<itemNumbers; i++) {
      itemWeights[i] = sc.nextInt();
      itemValues[i] = sc.nextInt();
    }

    // dp ํ‘œ ์ฑ„์šฐ๊ธฐ
    int[][] dp = new int[itemNumbers][maxWeight+1];
    for(int w=0; w<maxWeight+1; w++) {
      for(int i=0; i<itemNumbers; i++) {
        if(itemWeights[i] <= w) {
          int unincludedValue = (i>=1)? dp[i-1][w]:0;;
          int includedValue = itemValues[i] + ((i>=1)? dp[i-1][w-itemWeights[i]]:0);
          dp[i][w] = Math.max(unincludedValue, includedValue);

        } else {
          dp[i][w] = (i>=1)? dp[i-1][w]:0;
        }
      }
    }
    System.out.println(dp[itemNumbers-1][maxWeight]);
  }
}

 

'โ˜•Java > ์ฝ”๋”ฉํ…Œ์ŠคํŠธ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Java] ์ฝ”ํ…Œ์—์„œ ํšจ์œจ์ ์ธ ์ž…์ถœ๋ ฅ: BuffereredReader/Writer, StringTokenizer, StringBuilder + ๋ฐฑ์ค€ 15552  (1) 2025.11.23
[Java] ํˆฌ ํฌ์ธํ„ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜ / ๋ฐฑ์ค€ 1253๋ฒˆ  (0) 2025.11.07
[JAVA] ์Šฌ๋ผ์ด๋”ฉ ์œˆ๋„์šฐ (๋ฐฑ์ค€ 12891๋ฒˆ)  (0) 2025.05.22
[JAVA] ํˆฌ ํฌ์ธํ„ฐ (๋ฐฑ์ค€ 2018๋ฒˆ, ๋ฐฑ์ค€ 1940๋ฒˆ)  (1) 2025.05.18
[JAVA] ๊ตฌ๊ฐ„ ํ•ฉ ๊ตฌํ•˜๊ธฐ (๋ฐฑ์ค€ 11659๋ฒˆ, ๋ฐฑ์ค€ 2042๋ฒˆ)  (0) 2025.05.17
'โ˜•Java/์ฝ”๋”ฉํ…Œ์ŠคํŠธ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [Java] ์ฝ”ํ…Œ์—์„œ ํšจ์œจ์ ์ธ ์ž…์ถœ๋ ฅ: BuffereredReader/Writer, StringTokenizer, StringBuilder + ๋ฐฑ์ค€ 15552
  • [Java] ํˆฌ ํฌ์ธํ„ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜ / ๋ฐฑ์ค€ 1253๋ฒˆ
  • [JAVA] ์Šฌ๋ผ์ด๋”ฉ ์œˆ๋„์šฐ (๋ฐฑ์ค€ 12891๋ฒˆ)
  • [JAVA] ํˆฌ ํฌ์ธํ„ฐ (๋ฐฑ์ค€ 2018๋ฒˆ, ๋ฐฑ์ค€ 1940๋ฒˆ)
์†Œ์˜ ๐Ÿ€
์†Œ์˜ ๐Ÿ€
Hello World โœจ
  • ์†Œ์˜ ๐Ÿ€
    Soyoung's Dev Lab
    ์†Œ์˜ ๐Ÿ€
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
  • ๊ธ€์“ฐ๊ธฐ ๊ด€๋ฆฌ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (79)
      • ๐Ÿ“ข ๊ฒŒ์‹œํŒ (0)
      • ๐ŸŒฟSpring (20)
      • โ˜•Java (7)
        • ์ฝ”๋”ฉํ…Œ์ŠคํŠธ (7)
      • โš™๏ธ CS (26)
        • ๐Ÿ›œ ๋„คํŠธ์›Œํฌ (5)
        • ๐Ÿ“Š ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค (8)
        • ๐Ÿ–ฒ๏ธ์šด์˜์ฒด์ œ (9)
        • ๐Ÿ“š ์ž๋ฃŒ๊ตฌ์กฐ & ์•Œ๊ณ ๋ฆฌ์ฆ˜ (4)
      • ๐Ÿ“ค ๋ฐฐํฌ (4)
        • Docker (4)
        • AWS (0)
      • ๐Ÿ“ฐ ๊ธฐํƒ€ ๊ฐœ๋ฐœ ์ž๋ฃŒ (12)
      • ๐Ÿ–ฅ๏ธ ํ”„๋กœ์ ํŠธ (0)
      • ๐Ÿ‘ฉ‍๐Ÿ’ป ํ™œ๋™ & ํ›„๊ธฐ (1)
      • ๐Ÿต ์ด์•ผ๊ธฐ (2)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํƒœ๊ทธ
  • ๋งํฌ

    • github
    • velog
  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ์ฝ”๋”ฉํ…Œ์ŠคํŠธ
    ๊ธฐ์ˆ  ๋ฉด์ ‘
    ์ž๋ฃŒ๊ตฌ์กฐ
    ์„œ๋ฒ„
    ์šด์˜์ฒด์ œ
    ๋„คํŠธ์›Œํฌ
    ์•Œ๊ณ ๋ฆฌ์ฆ˜
    Spring Security
    docker
    Java
    ์œ„ํด๋ฆฌ ํŽ˜์ดํผ
    ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค
    ๊ฐœ๋ฐœ
    Spring
    ๊ฐ์ฒด์ง€ํ–ฅํ”„๋กœ๊ทธ๋ž˜๋ฐ
    ์ฝ”๋“œ์ž‡ ์Šคํ”„๋ฆฐํŠธ
    GIT
    ๋ฐฐํฌ
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
์†Œ์˜ ๐Ÿ€
[Java] ๋™์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ(DP, Dynamic Programming) / ๋ฐฑ์ค€ 12865๋ฒˆ / ๋ฐฐ๋‚ญ ๋ฌธ์ œ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”