Skip to content

Commit 849a6ae

Browse files
committed
coin change solution
1 parent e6160eb commit 849a6ae

File tree

1 file changed

+38
-0
lines changed

1 file changed

+38
-0
lines changed

β€Žcoin-change/radiantchoi.pyβ€Ž

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
from collections import deque
2+
3+
class Solution:
4+
def coinChange(self, coins: List[int], amount: int) -> int:
5+
# BFSλ₯Ό μ΄μš©ν•œ μ΅œμ†Œ 동전 개수 μ°ΎκΈ°
6+
# 동전을 ν•˜λ‚˜μ”© μΆ”κ°€ν•˜λ©΄μ„œ λ§Œλ“€ 수 μžˆλŠ” κΈˆμ•‘μ„ 탐색 (λ ˆλ²¨λ³„ 탐색)
7+
# BFS νŠΉμ„±μƒ λ¨Όμ € λ„λ‹¬ν•˜λŠ” κ²½λ‘œκ°€ μ΅œμ†Œ 동전 개수 보μž₯
8+
# dp[i]: amountκ°€ i일 λ•Œ μ΅œμ†Œ 동전 μ‚¬μš© 횟수
9+
# λͺ¨λ“  경우 방법이 μ—†λ‹€κ³  κ°€μ •ν•˜κ³  -1둜 μ΄ˆκΈ°ν™”
10+
dp = [-1 for _ in range(amount + 1)]
11+
12+
# bfs μ…‹μ—… - 합이 0인 λ…Έλ“œλ₯Ό λ°©λ¬Έν•˜κ³ , λ°©λ¬Έ 처리
13+
dp[0] = 0
14+
# 큐의 각 μš”μ†Œ: [μ‚¬μš©ν•œ 동전 개수, ν˜„μž¬κΉŒμ§€μ˜ ν•©]
15+
# μ‹œμž‘ μƒνƒœ: 동전 0개, ν•© 0
16+
q = deque([[0, 0]])
17+
18+
while q:
19+
# current[0]: μ‚¬μš©ν•œ 동전 개수, current[1]: ν˜„μž¬κΉŒμ§€μ˜ ν•©
20+
current = q.popleft()
21+
22+
# 각각의 동전은 λ¬΄ν•œνžˆ μ‚¬μš©ν•  수 μžˆμœΌλ―€λ‘œ, κ°€λŠ₯ν•œ 경우 λͺ¨λ‘ 탐색
23+
for coin in coins:
24+
estimated = current[1] + coin
25+
26+
# estimated <= amount: λͺ©ν‘œ κΈˆμ•‘μ„ μ΄ˆκ³Όν•˜μ§€ μ•ŠλŠ” 경우만 탐색
27+
# dp[estimated] == -1: 아직 λ°©λ¬Έν•˜μ§€ μ•Šμ€ κΈˆμ•‘ (BFS νŠΉμ„±μƒ 졜초 도달이 졜적)
28+
# 두 쑰건 λͺ¨λ‘ ν†΅κ³Όν•˜λ©΄ 큐에 μΆ”κ°€ν•˜μ—¬ 계속 탐색
29+
if estimated <= amount and dp[estimated] == -1:
30+
used = current[0] + 1
31+
dp[estimated] = used
32+
33+
new = [used, estimated]
34+
q.append(new)
35+
36+
# dp[amount]κ°€ -1이면 λͺ¨λ“  경우 방법이 μ—†λ‹€λŠ” μ˜λ―Έμ΄λ―€λ‘œ -1 λ°˜ν™˜
37+
# κ·Έλ ‡μ§€ μ•Šλ‹€λ©΄ dp[amount] λ°˜ν™˜
38+
return dp[amount]

0 commit comments

Comments
Β (0)