๐ ๋์ ๊ตํ(๋ ์ ์๊ณ ๋ฆฌ์ฆ)
๋ค์๊ณผ ๊ฐ์ด ์ฌ๋ฌ ๋จ์์ ๋์ ๋ค์ด ์ฃผ์ด์ ธ ์์๋ ๊ฑฐ์ค๋ฆ๋์ ๊ฐ์ฅ ์ ์ ์์ ๋์ ์ผ๋ก ๊ตํํด์ฃผ๋ ค๋ฉด ์ด๋ป๊ฒ ์ฃผ๋ฉด ๋๋๊ฐ? ๊ฐ ๋จ์์ ๋์ ์ ๋ฌดํ์ ์ธ ์ ์๋ค.
์ ๋ ฅ์ค๋ช
์ฒซ ๋ฒ์งธ ์ค์๋ ๋์ ์ ์ข ๋ฅ๊ฐ์ N(1<=N<=12)์ด ์ฃผ์ด์ง๋ค. ๋ ๋ฒ์งธ ์ค์๋ N๊ฐ์ ๋์ ์ ์ข ๋ฅ๊ฐ ์ฃผ์ด์ง๊ณ , ๊ทธ ๋ค์์ค์ ๊ฑฐ์ฌ๋ฌ ์ค ๊ธ์ก M(1<=M<=500)์ด ์ฃผ์ด์ง๋ค.
๊ฐ ๋์ ์ ์ข ๋ฅ๋ 100์์ ๋์ง ์๋๋ค.
์ถ๋ ฅ์ค๋ช
์ฒซ ๋ฒ์งธ ์ค์ ๊ฑฐ์ฌ๋ฌ ์ค ๋์ ์ ์ต์๊ฐ์๋ฅผ ์ถ๋ ฅํ๋ค.
์ ๋ ฅ์์ | ์ถ๋ ฅ์์ |
3 1 2 5 15 |
3 (5 5 5) |
๐ ํ์ด ๋ฐฉ๋ฒ
DFS๋ฅผ ์ฌ์ฉํด ์ถฉ๋ถํ ํด๊ฒฐํ ์ ์๋ ๋ฌธ์ ์ด์ง๋ง N์ด 100 ์ด์, M์ด 10000 ์ด์์ผ๋ก ์ปค์ง๋ค๋ฉด ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฐ๋ค๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
DP ๋ฌธ์ ์์ ์ ๋ช ํ ๋ ์ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํด ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค.
- dy[j] - j ๊ธ์ก์ ๊ฑฐ์ฌ๋ฌ์ฃผ๋๋ฐ ์ฌ์ฉ๋ ์ต์ ๋์ ์ ๊ฐ์
- ์์์ ํ์ด ๊ณผ์ ์ค ํ ์ฅ๋ฉด์ ์์๋ก ๋ณด์ฌ์ฃผ์๋ค. ์ด์ ๊ฐ์ ๊ณผ์ ์ ๋ฐ๋ณตํ ํ dy ๋ฐฐ์ด์ ๋ง์ง๋ง ์์๋ฅผ answer ๋ณ์์ ํ ๋นํด์ฃผ๋ฉด ๋๋ค.
function solution(m, coin) {
let answer = 0;
// ์ต์ ๋์ ์ ๊ฐ์๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ์ด๋ฏ๋ก ์ต๋ ๋์ ์ ๊ฐ์ 500(1 x 500)๋ณด๋ค ํฐ 1000์ผ๋ก ์ด๊ธฐํ
let dy = Array.from({ length: m + 1 }, () => 1000);
// 0์์ ๊ฑฐ์ฌ๋ฌ์ฃผ๋๋ฐ ์ฌ์ฉ๋๋ ๋์ ์ ๊ฐ์๋ ์์ผ๋ฏ๋ก 0์ผ๋ก ์ด๊ธฐํ
dy[0] = 0;
for (let i = 0; i < coin.length; i++) {
for (let j = coin[i]; j <= m; j++) {
dy[j] = Math.min(dy[j], dy[j - coin[i]] + 1);
}
}
answer = dy[m];
return answer;
}
let arr = [1, 2, 5];
console.log(solution(15, arr));
'Algorithm > ์ธํ๋ฐ(inflearn)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JavaScript/section 10] 05 - ์ต๋์ ์ ๊ตฌํ๊ธฐ (0) | 2022.12.26 |
---|---|
[JavaScript/section 10] 03 - ์ต๋ ๋ถ๋ถ ์ฆ๊ฐ ์์ด (0) | 2022.12.21 |
[JavaScript/section 10] 02 - ๋๋ค๋ฆฌ ๊ฑด๋๊ธฐ (0) | 2022.12.19 |
[JavaScript/section 10] 01 - ๊ณ๋จ์ค๋ฅด๊ธฐ (0) | 2022.12.17 |
[JavaScript/section 9] 07 - ์ฌ๋๋ผ ์์ผ๋๋(BFS) (0) | 2022.11.28 |