Skip to content

Commit 1813451

Browse files
committed
coin-change solution
1 parent 636e736 commit 1813451

File tree

1 file changed

+28
-0
lines changed

1 file changed

+28
-0
lines changed

β€Žcoin-change/moonjonghoo.jsβ€Ž

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
/**
2+
* πŸ”’ 문제 이름: coin-change
3+
* 🧩 문제 μœ ν˜•: dp
4+
* πŸ’‘ 핡심 아이디어
5+
* - κΈˆμ•‘ iλ₯Ό λ§Œλ“€ 수 μžˆλŠ” μ΅œμ†Œ 동전 수λ₯Ό dp[i]에 μ €μž₯
6+
* - ν•˜μœ„ 문제 dp[i - coin]μ—μ„œ 1개λ₯Ό μΆ”κ°€ν•˜λŠ” 방식
7+
* - dp[0] = 0을 μ‹œμž‘μœΌλ‘œ bottom-up λ°©μ‹μœΌλ‘œ 점화식을 μ±„μ›Œλ‚˜κ°„λ‹€
8+
*
9+
* πŸ“ˆ μ‹œκ°„λ³΅μž‘λ„: O(n * k) β€” n = amount, k = coins.length
10+
* πŸ“¦ κ³΅κ°„λ³΅μž‘λ„: O(n)
11+
*/
12+
13+
function coinChange(coins, amount) {
14+
//1. dp 배열을 μ„€μ •ν•©λ‹ˆλ‹€.
15+
const dp = new Array(amount + 1).fill(Infinity);
16+
dp[0] = 0;
17+
//2. νƒμƒ‰ν•˜μ—¬ μ΅œμ†Œλ™μ „μ˜ 개수λ₯Ό 담은 dp배열을 μ±„μ›λ‹ˆλ‹€.
18+
for (let i = 1; i <= amount; i++) {
19+
for (let coin of coins) {
20+
//코인을 μ‚¬μš©κ°€λŠ₯ν•˜λ‹€λ©΄, 비ꡐꡐ
21+
if (i - coins >= 0) {
22+
dp[i] = Math.min(dp[i], dp[i - coin] + 1);
23+
}
24+
}
25+
}
26+
// 3. amount 값이 Infinity 라면 λΆˆκ°€λŠ₯ν•˜λ‹€λΌλŠ” μ˜λ―ΈκΈ°λ–„λ¬Έμ— -1 리턴턴
27+
return dp[amount] === Infinity ? -1 : dp[amount];
28+
}

0 commit comments

Comments
Β (0)