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

[ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ(JavaScript) ] section08 - 7 - ์ตœ๋Œ€์ ์ˆ˜ ๊ตฌํ•˜๊ธฐ(DFS)

by YWTechIT 2021. 9. 23.
728x90

๐Ÿ“ section08 - 7 - ์ตœ๋Œ€์ ์ˆ˜ ๊ตฌํ•˜๊ธฐ(DFS)

์ œํ•œ์‹œ๊ฐ„ M์•ˆ์— N๊ฐœ์˜ ๋ฌธ์ œ ์ค‘ ์ตœ๋Œ€์ ์ˆ˜๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋„๋ก ๊ตฌํ•˜๋Š” ๋ฌธ์ œ๋‹ค. ์ฒ˜์Œ ๋ฌธ์ œ๋ฅผ ๋ดค์„ ๋•Œ ํšŒ์˜์‹ค ๋ฐฐ์ •๋ฌธ์ œ์™€ ๋น„์Šทํ•œ ์ค„ ์•Œ์•˜๋Š”๋ฐ, ๊ทธ๋ฆฌ๋””๋กœ๋Š” ํ’€ ์ˆ˜ ์—†์—ˆ๋‹ค. ์ ์ˆ˜๋ฅผ ๋†’์€ ์ˆœ์œผ๋กœ ์ •๋ ฌ(sort)ํ•œ ๋‹ค์Œ ์ˆœ์„œ๋Œ€๋กœ ํ’€๋ฉด ์ œ ํ•œ ์‹œ๊ฐ„ ์•ˆ์— ์ตœ๋Œ€ ์ ์ˆ˜๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์ง€ ์•Š๋‚˜?๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋Š”๋ฐ ๊ทธ๊ฒƒ๋ณด๋‹ค, ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜(๋ถ€๋ถ„์ง‘ํ•ฉ)๋ฅผ ๊ตฌํ•ด์„œ M๋ณด๋‹ค ์ž‘์œผ๋ฉด์„œ ๋™์‹œ์— ์ตœ๋Œ€ ์ ์ˆ˜๋ฅผ ๊ฐฑ์‹ ํ•˜๋ฉด ๋˜๋Š” ๋ฌธ์ œ์˜€๋‹ค.

 

์—ฌ๊ธฐ์„œ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜์ง€ ์•Š๊ณ  edgeCut(๊ฐ€์ง€์น˜๊ธฐ)์„ ์ด์šฉํ–ˆ๋Š”๋ฐ ํ˜„์žฌ๊นŒ์ง€ ๋ˆ„์ ๋œ ์‹œ๊ฐ„์ด M๋ณด๋‹ค ํฌ๋‹ค๋ฉด ๋” ์ด์ƒ ๊ณ„์‚ฐ ํ•  ํ•„์š” ์—†์ด returnํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ–ˆ๋‹ค. ์ข…๋ฃŒ ์กฐ๊ฑด์€ L===n์ธ๋ฐ, ๋ฌธ์ œ๋Š” ํ•œ ์œ ํ˜•๋‹น ํ•œ ๊ฐœ์”ฉ๋งŒ ํ’€ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•˜๋‚˜์”ฉ ๋ชจ๋‘ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ ์ตœ๋Œ€ L(level)์€ N์ด ๋˜๊ธฐ๋•Œ๋ฌธ์ด๋‹ค. ํ•˜๋‹จ์˜ DFS์˜ ๊ทธ๋ฆผ์„ ์ฐธ๊ณ ํ•˜์ž. ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ทธ๋ฆฌ์ง„ ์•Š๊ณ , ์ด๋ ‡๊ฒŒ ๋ฌธ์ œ์™€ ์ ์ˆ˜๋ฅผ ๋ˆ„์ ํ•ด๊ฐ„๋‹ค๋Š” ๊ฒƒ์„ ํ‘œํ˜„ํ–ˆ๋‹ค.

 

 

 

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 answer=Number.MIN_SAFE_INTEGER;

  function DFS(L, sum, time){
    if (time > m) return;
    if (L === n){
      answer = Math.max(answer, sum);
    }else{
      DFS(L+1, sum+arr[L][0], time+arr[L][1]);
      DFS(L+1, sum, time);
    }
  }
  DFS(0, 0, 0);
  return answer;
}
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€