Algorithm/์ธํ๋ฐ(inflearn)
[JavaScript/section 8] 07 - ์ต๋์ ์ ๊ตฌํ๊ธฐ
_์ฑํธ_
2022. 10. 26. 08:17
728x90
๋ฐ์ํ
๐ 07 - ์ต๋์ ์ ๊ตฌํ๊ธฐ(DFS)
์ด๋ฒ ์ ๋ณด ์ฌ๋ฆผํผ์๋๋ํ์์ ์ข์ ์ฑ์ ์ ๋ด๊ธฐ ์ํ์ฌ ํ์๋ ์ ์๋์ด ์ฃผ์ N๊ฐ์ ๋ฌธ์ ๋ฅผ ํ๋ ค๊ณ ํ๋ค. ๊ฐ ๋ฌธ์ ๋ ๊ทธ๊ฒ์ ํ์์ ๋ ์ป๋ ์ ์์ ํธ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ด ์ฃผ์ด์ง๊ฒ ๋๋ค. ์ ํ ์๊ฐ M ์์ N๊ฐ์ ๋ฌธ์ ์ค ์ต๋์ ์๋ฅผ ์ป์ ์ ์๋ ๊ฒฝ์ฐ๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ์ด๋ค. ๋จ, ํด๋น ๋ฌธ์ ๋ ํด๋น ์๊ฐ์ด ๊ฑธ๋ฆฌ๋ฉด ํธ๋ ๊ฑธ๋ก ๊ฐ์ฃผํ๊ณ ํ ์ ํ๋น ํ ๊ฐ๋ง ํ ์ ์๋ค.
๐ ํ์ด ๋ฐฉ๋ฒ
์ด์ ์ ํ์๋ ๋ฐ๋์ด ์น์ฐจ ๋ฌธ์ ๋ฅผ ์ดํดํ๋ค๋ฉด ์ด ๋ฌธ์ ๋ํ ์ด๋ป๊ฒ ํ์ด์ผ ํ๋์ง ๊ฐ์ด ์ฌ ๊ฒ์ด๋ค. ๋ฌธ์ ๋ฅผ ํผ๋ค, ์ํผ๋ค, 2๊ฐ์ง์ ๊ฒฝ์ฐ์ ์๋ง ์กด์ฌํ๋ค.
- ์ฌ๊ท๋ฅผ ๋๋ฉด์ ๋ฌธ์ ๋ฅผ ํผ ๊ฒฝ์ฐ sum ๋ณ์์ ํด๋น ๋ฌธ์ ์ ์ ์๋ฅผ ๋์ ํ๊ณ time ๋ณ์์ ํด๋น ๋ฌธ์ ๋ฅผ ํธ๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ๋์ ํ ํ ์ธ์๋ก ๋ณด๋ธ๋ค.
- ํ์ง ๋ชปํ ๊ฒฝ์ฐ ๊ธฐ์กด์ sum๊ณผ time ๋ณ์์ ์ ์ฅ๋ ๊ฐ์ ์ธ์๋ก ๋ณด๋ธ๋ค.
- ๋ฌธ์ ๋ฅผ ํธ๋๋ฐ ๊ฑธ๋ฆฐ ์ด ์๊ฐ์ด ์ฃผ์ด์ง ์ ํ ์๊ฐ๋ณด๋ค ํฌ๋ค๋ฉด ๋ฐ๋ก return ํ๋ค.
- ์ฃผ์ด์ง ์ ํ ์๊ฐ์ ๋์ด๊ฐ์ง ์์ผ๋ฉด์ L(์ด์ง ํธ๋ฆฌ ๋ ๋ฒจ)์ด ๋ฐฐ์ด์ ๊ธธ์ด์ ๊ฐ๋ค๋ฉด ํ๋์ ๋ถ๋ถ์งํฉ์ด ์์ฑ๋ฌ๋ค๋ ๊ฒ์ด๋ฏ๋ก answer ๋ณ์์ ์ ์ฅ๋ ๊ฐ(์ต๋์ ์)๊ณผ sum์ ๋น๊ตํ์ฌ ๋ ํฐ ๊ฐ์ answer ๋ณ์์ ์ฌํ ๋นํ๋ค.
๐ ์์ค ์ฝ๋
function solution(m, ps, pt) {
let answer = Number.MIN_SAFE_INTEGER;
let len = ps.length;
function DFS(L, sum, time) {
if (time > m) return;
if (L === len) {
answer = Math.max(answer, sum);
} else {
DFS(L + 1, sum + ps[L], time + pt[L]);
DFS(L + 1, sum, time);
}
}
DFS(0, 0, 0);
return answer;
}
let ps = [10, 25, 15, 6, 7];
let pt = [5, 12, 8, 3, 4];
console.log(solution(20, ps, pt));