Skip to content

Commit 127f9a6

Browse files
committed
add: solve #269 Coin Change with ts
1 parent bf38b87 commit 127f9a6

File tree

1 file changed

+45
-0
lines changed

1 file changed

+45
-0
lines changed

β€Žcoin-change/Yjason-K.tsβ€Ž

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
/**
2+
* κ°€μ§€κ³  μžˆλŠ” 동전을 μ΅œλŒ€ν•œ ν™œμš©ν•˜μ—¬ μ΅œμ†Œμ˜ μ‘°ν•©μœΌλ‘œ amountλ₯Ό λ§Œλ“œλŠ” μ΅œμ†Œ 동전 개수 κ΅¬ν•˜λŠ” ν•¨μˆ˜
3+
*
4+
* @param {number[]} coins - μ‚¬μš© κ°€λŠ₯ν•œ 동전 λ°°μ—΄
5+
* @param {number} amount - λ§Œλ“€μ–΄μ•Ό ν•˜λŠ” 총합
6+
* @returns {number}
7+
*
8+
* μ‹œκ°„ λ³΅μž‘λ„ O(n * m)
9+
* - n은 동전 λ°°μ—΄μ˜ 크기
10+
* - m은 amount
11+
*
12+
* 곡간 λ³΅μž‘λ„ (n);
13+
* - 큐에 μ΅œλŒ€ n개의 μš”μ†Œκ°€ λ“€μ–΄κ°ˆ 수 있음
14+
*/
15+
function coinChange(coins: number[], amount: number): number {
16+
// 총합이 0인 경우 0 λ°˜ν™˜
17+
if (amount === 0) return 0;
18+
19+
// λ„ˆλΉ„ μš°μ„  탐색을 ν™œμš©ν•œ 풀이
20+
21+
const queue: [number, number] [] = [[0, 0]]; // [ν˜„μž¬ 총합, 깊이]
22+
const visited = new Set<number>();
23+
24+
while (queue.length > 0) {
25+
const [currentSum, depth] = queue.shift()!;
26+
27+
// 동전을 ν•˜λ‚˜μ”© λ”ν•΄μ„œ λ‹€μŒ κΉŠμ΄μ„ 탐색
28+
for (const coin of coins) {
29+
const nextSum = currentSum + coin;
30+
31+
// λͺ©ν‘œ κΈˆμ•‘μ— λ„λ‹¬ν•˜λ©΄ ν˜„μž¬ 깊이λ₯Ό λ°˜ν™˜
32+
if (nextSum === amount) return depth + 1;
33+
34+
// 아직 총합에 λ„λ‹¬ν•˜μ§€ μ•Šμ•˜κ³ , μ€‘λ³΅λ˜μ§€ μ•Šμ•„ 탐색 κ°€λŠ₯ν•œ 경우
35+
if (nextSum < amount && !visited.has(nextSum)) {
36+
queue.push([nextSum, depth + 1]);
37+
visited.add(nextSum)
38+
}
39+
40+
}
41+
}
42+
43+
// 탐색 쑰건을 μ™„λ£Œ 해도 경우의 수λ₯Ό μ°Ύμ§€ λͺ»ν•œ 경우
44+
return -1;
45+
}

0 commit comments

Comments
Β (0)