๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm/์ธํ”„๋Ÿฐ(inflearn)

[ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ(JavaScript) ] section10 - 5 - ์ตœ๋Œ€ ์ ์ˆ˜ ๊ตฌํ•˜๊ธฐ(๋ƒ…์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜)

by YWTechIT 2021. 10. 14.
728x90

๐Ÿ“ 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]๋ฅผ ๋น„๊ตํ•˜๋ฉด ์•ˆ ๋˜๋Š”๋ฐ ์™œ๋ƒํ•˜๋ฉด ๋™์ „ ๋ฌธ์ œ๋Š” ๋™์ „์„ ๋ฌดํ•œ์ • ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ด ๋ฌธ์ œ๋Š” ํ•œ ์œ ํ˜• ๋‹น ๋ฌธ์ œ ํ•œ ๊ฐœ๋งŒ ํ’€ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ทธ๋ž˜์„œ ์•ž์—์„œ๋ถ€ํ„ฐ ๋น„๊ตํ•˜๋Š” ๋ฐฉ๋ฒ•๋ณด๋‹ค๋Š” ๋’ค์—์„œ๋ถ€ํ„ฐ ๋น„๊ตํ•˜๋ฉด ์ค‘๋ณต์‚ฌ์šฉ์„ ๋ง‰์„ ์ˆ˜ ์žˆ๋‹ค.

 

  1. dp[j]: j์‹œ๊ฐ„ ์•ˆ์— ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ์ ์ˆ˜ (dp[15]: 15๋ถ„ ๋™์•ˆ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ์ ์ˆ˜)
  2. ์ฃผ์–ด์ง„ ์‹œ๊ฐ„๊นŒ์ง€ dp๋ฅผ 0์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.(์ตœ๋Œ€ ๊ฐ’์„ ๊ตฌํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—)
  3. ๋ฌธ์ œ 1๊ฐœ([10, 5])๋งŒ ํ’€ ๋•Œ, ๋ฌธ์ œ 2๊ฐœ๊นŒ์ง€ ([10, 5], [25, 12]) ํ’€ ๋•Œ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ์ ์ˆ˜, ๋ชจ๋“  ๋ฌธ์ œ๊นŒ์ง€ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ์ ์ˆ˜ ์ด๋ ‡๊ฒŒ ๋ฒ”์œ„๋ฅผ ์ ์ฐจ ๋„“ํ˜€๊ฐ€๋ฉฐ ๊ตฌํ•œ๋‹ค.
  4. ๊ธฐ์กด์˜ ๋™์ „๋ฌธ์ œ๋Š” ๋™์ „์„ ๋ฌดํ•œ์ • ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์„œ ์•ž์—์„œ๋ถ€ํ„ฐ ๊ตฌํ–ˆ๋Š”๋ฐ, ์ด ๋ฌธ์ œ๋Š” ์ค‘๋ณต ํ—ˆ์šฉ์ด ์•ˆ๋˜๋ฏ€๋กœ ๋’ค์—์„œ๋ถ€ํ„ฐ ํ‘ผ๋‹ค(j=m~pt)
  5. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ฒซ ๋ฒˆ์งธ ๋ฌธ์ œ([10, 5])์™€ ๋‘ ๋ฒˆ์งธ ๋ฌธ์ œ([25, 12])๋กœ ์ œํ•œ ์‹œ๊ฐ„๋‚ด์— ๋ฌธ์ œ๋ฅผ ํ’€ ๋•Œ์˜ ์ตœ๋Œ€ ์ ์ˆ˜๋ฅผ ๊ตฌํ•  ๋•Œ ํ˜„์žฌ ps=25, pt=12๋ผ๊ณ  ํ•œ๋‹ค๋ฉด m=20์ด๋ฏ€๋กœ ๋งจ ์ฒ˜์Œ์€ 20๋ถ€ํ„ฐ ์‹œ์ž‘ํ•œ๋‹ค. 20-12=8์ด๊ณ  (์—ฌ๊ธฐ์„œ ๊ฐ’์„ ๋นผ์ฃผ๋Š” ์ด์œ ๋Š” ํ˜„์žฌ ๋ฌธ์ œ๋ฅผ ํ’€ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ํ˜„์žฌ ๋ฌธ์ œ๋ฅผ ํ’€๊ธฐ ์ด์ „์˜ ์ตœ๋Œ€ ์ ์ˆ˜๋ฅผ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•จ์ด๋‹ค.) ์ด๋•Œ8๋ถ„์œผ๋กœ ์–ป์—ˆ๋˜ ์ตœ๋Œ€ ์ ์ˆ˜๋Š” 10์ ์ด๋‹ค. ์—ฌ๊ธฐ์— ์ง€๊ธˆ ํ‘ธ๋Š” ๋ฌธ์ œ์˜ ์ ์ˆ˜(ps=25)๋ฅผ ๋”ํ•œ ๊ฐ’์„ ์ ์šฉํ•˜๋ฉด dp[20]=35๊ฐ€ ๋œ๋‹ค.
  6. ์ตœ๋Œ€ ์ ์ˆ˜๋ฅผ ๊ตฌํ•˜๊ธฐ ๋•Œ๋ฌธ์—์„œ ๊ธฐ์กด ์ ์ˆ˜์™€ ์ƒˆ๋กœ ํ‘ผ ์ ์ˆ˜๋ฅผ ๋น„๊ตํ•ด์„œ ๋” ํฐ ๊ฐ’์„ dp์— ๋„ฃ์ž.(Math.max ์ด์šฉ)
  7. ํ•˜๋‹จ์— ์ƒˆ๋กœ์šด ๋ฌธ์ œ๋ฅผ ํ’€ ๋•Œ๋งˆ๋‹ค ์ตœ๋Œ€ ์ ์ˆ˜๋ฅผ ๊ธฐ๋กํ•˜๊ณ  ์žˆ๋Š” dp๋ฅผ ์ถœ๋ ฅํ–ˆ๋‹ค. ํ•ญ์ƒ ์ƒˆ๋กœ์šด ๋ฌธ์ œ๋ฅผ ํ’€ ๋•Œ๋งˆ๋‹ค ์ตœ๋Œ€์  ์ˆ˜๋กœ ๊ฐฑ์‹ ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์„ ์—ผ๋‘์— ๋‘์ž.

 

 

728x90

 

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
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€