728x90
๋ฐ์ํ
๐ 08 - ๋ฐ๋์ด ์น์ฐจ(DFS)
์ฒ ์๋ ๊ทธ์ ๋ฐ๋์ด๋ค์ ๋ฐ๋ฆฌ๊ณ ์์ฅ์ ๊ฐ๋ ค๊ณ ํ๋ค. ๋จ, ์ฒ ์๋ Cํฌ๋ก๊ทธ๋จ์ ๋์ง ์์ผ๋ฉด์ ๊ทธ์ ๋ฐ๋์ด๋ค์ ๊ฐ์ฅ ๋ฌด๊ฒ๊ฒ ํ์ฐ๊ณ ์ถ์ดํ๋ค. N๋ง๋ฆฌ์ ๋ฐ๋์ด์ ๊ฐ ๋ฐ๋์ด์ ๋ฌด๊ฒ W๊ฐ ์ฃผ์ด์ง๋ฉด, ์ฒ ์๊ฐ ํธ๋ญ์ ํ์ธ ์ ์๋ ๊ฐ์ฅ ๋ฌด๊ฑฐ์ด ๋ฌด๊ฒ๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ์ด๋ค.
๐ ํ์ด ๋ฐฉ๋ฒ
๊ฐ๊ฐ์ ๋ฐ๋์ด๋ฅผ ํธ๋ญ์ ํ์ด๋ค, ์ ํ์ด๋ค, 2๊ฐ์ง์ ๊ฒฝ์ฐ์ ์๋ง ์์ผ๋ฏ๋ก ์ด์ง ํธ๋ฆฌ ๊ตฌ์กฐ์ ๋ถ๋ถ์งํฉ์ ๊ตฌํ๋ ๋ฌธ์ ๋ฅผ ๋ ์ฌ๋ ค์ผ ํ๋ค. ๋ค์ ๋ถ๋ถ์งํฉ ๊ตฌํ๊ธฐ ๋ฌธ์ ๋ฅผ ์ฐธ๊ณ ํด๋ณด์.
- ์ฌ๊ท๋ฅผ ๋๋ฉด์ ํธ๋ญ์ ํ์ด ๋ฐ๋์ด๋ค์ ๋ฌด๊ฒ ํฉ(sum)์ ๊ตฌํ๋ค.
- sum์ด c(ํธ๋ญ์ ํ์ธ ์ ์๋ ์ต๋ ๋ฌด๊ฒ)๋ณด๋ค ํฐ ๊ฒฝ์ฐ์ ๋ฐ๋ก return ํ๋ค.
- sum์ด c๋ณด๋ค ์์ผ๋ฉด์ L(์ด์ง ํธ๋ฆฌ ๋ ๋ฒจ)์ด ๋ฐฐ์ด์ ๊ธธ์ด์ ๊ฐ๋ค๋ฉด ํ๋์ ๋ถ๋ถ์งํฉ์ด ์์ฑ๋ฌ๋ค๋ ๊ฒ์ด๋ฏ๋ก answer ๋ณ์์ ์ ์ฅ๋ ๊ฐ๊ณผ sum์ ๋น๊ตํ์ฌ ๋ ํฐ ๊ฐ์ answer ๋ณ์์ ์ฌํ ๋นํ๋ค.
๐ ์์ค ์ฝ๋
function solution(c, arr) {
let answer = Number.MIN_SAFE_INTEGER;
let len = arr.length;
function DFS(L, sum) {
if (sum > c) return;
// ํ๋์ ๋ถ๋ถ์งํฉ ์์ฑ
if (L === len) {
answer = Math.max(answer, sum);
} else {
DFS(L + 1, sum + arr[L]);
DFS(L + 1, sum);
}
}
DFS(0, 0);
return answer;
}
let arr = [81, 58, 42, 33, 61];
console.log(solution(259, arr));
'Algorithm > ์ธํ๋ฐ(inflearn)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JavaScript/section 8] 08 - ์ค๋ณต์์ด ๊ตฌํ๊ธฐ (0) | 2022.10.30 |
---|---|
[JavaScript/section 8] 07 - ์ต๋์ ์ ๊ตฌํ๊ธฐ (0) | 2022.10.26 |
[JavaScript/section 8] 05 - ํฉ์ด ๊ฐ์ ๋ถ๋ถ์งํฉ (0) | 2022.10.21 |
[JavaScript/section 8] 04 - ๋ถ๋ถ์งํฉ ๊ตฌํ๊ธฐ (0) | 2022.10.20 |
[JavaScript/section 8] 03 - ์ด์งํธ๋ฆฌ ์ํ (0) | 2022.10.18 |