๐ section08 - 7 - ์ต๋์ ์ ๊ตฌํ๊ธฐ(DFS)
์ ํ์๊ฐ M
์์ N
๊ฐ์ ๋ฌธ์ ์ค ์ต๋์ ์๋ฅผ ์ป์ ์ ์๋๋ก ๊ตฌํ๋ ๋ฌธ์ ๋ค. ์ฒ์ ๋ฌธ์ ๋ฅผ ๋ดค์ ๋ ํ์์ค ๋ฐฐ์ ๋ฌธ์ ์ ๋น์ทํ ์ค ์์๋๋ฐ, ๊ทธ๋ฆฌ๋๋ก๋ ํ ์ ์์๋ค. ์ ์๋ฅผ ๋์ ์์ผ๋ก ์ ๋ ฌ(sort)
ํ ๋ค์ ์์๋๋ก ํ๋ฉด ์ ํ ์๊ฐ ์์ ์ต๋ ์ ์๋ฅผ ์ป์ ์ ์์ง ์๋?๋ผ๊ณ ์๊ฐํ๋๋ฐ ๊ทธ๊ฒ๋ณด๋ค, ๋ชจ๋ ๊ฒฝ์ฐ์ ์(๋ถ๋ถ์งํฉ
)๋ฅผ ๊ตฌํด์ M
๋ณด๋ค ์์ผ๋ฉด์ ๋์์ ์ต๋ ์ ์๋ฅผ ๊ฐฑ์ ํ๋ฉด ๋๋ ๋ฌธ์ ์๋ค.
์ฌ๊ธฐ์ ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํ์ง ์๊ณ edgeCut(๊ฐ์ง์น๊ธฐ)
์ ์ด์ฉํ๋๋ฐ ํ์ฌ๊น์ง ๋์ ๋ ์๊ฐ์ด M
๋ณด๋ค ํฌ๋ค๋ฉด ๋ ์ด์ ๊ณ์ฐ ํ ํ์ ์์ด return
ํ๋ ์ฝ๋๋ฅผ ์ถ๊ฐํ๋ค. ์ข
๋ฃ ์กฐ๊ฑด์ L===n
์ธ๋ฐ, ๋ฌธ์ ๋ ํ ์ ํ๋น ํ ๊ฐ์ฉ๋ง ํ ์ ์๊ธฐ ๋๋ฌธ์ ํ๋์ฉ ๋ชจ๋ ์ฌ์ฉํ์ ๋ ์ต๋ L(level)
์ N
์ด ๋๊ธฐ๋๋ฌธ์ด๋ค. ํ๋จ์ DFS
์ ๊ทธ๋ฆผ์ ์ฐธ๊ณ ํ์. ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ทธ๋ฆฌ์ง ์๊ณ , ์ด๋ ๊ฒ ๋ฌธ์ ์ ์ ์๋ฅผ ๋์ ํด๊ฐ๋ค๋ ๊ฒ์ ํํํ๋ค.

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;
}
๋๊ธ