Skip to content

Commit 9afa0f2

Browse files
committed
322. Coin Change
1 parent d77d59d commit 9afa0f2

1 file changed

Lines changed: 37 additions & 0 deletions

File tree

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

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
# coins: λ™μ „μ˜ 가격이 적힌 μ •μˆ˜ λ°°μ—΄, 각 μˆ«μžλŠ” μœ λ‹ˆν¬ν•¨, 정렬에 λŒ€ν•œ μ–ΈκΈ‰ X, (1 <= coins.length <= 12)
2+
# amount: 돈의 총합
3+
4+
# amountλ₯Ό λ§Œλ“€ 수 μžˆλŠ” κ°€μž₯ 적은 λ™μ „μ˜ 수λ₯Ό λ°˜ν™˜ν•œλ‹€.
5+
# coins둜 amountλ₯Ό λ§Œλ“€ 수 μ—†λŠ” 경우 -1을 λ°˜ν™˜
6+
# λ™μ „μ˜ μ’…λ₯˜λŠ” λ¬΄ν•œλŒ€λΌκ³  κ°€μ •ν•˜κ³  문제λ₯Ό ν’€ 것
7+
8+
# μ²˜μŒμ—λŠ” greedy둜 μ ‘κ·Όν•˜λ €κ³  ν–ˆλŠ”λ°, κΈˆμ•‘μ΄ 큰 동전을 λ¨Όμ € μ„ νƒν•˜λŠ”κ²Œ μ΅œμ†Œ λ™μ „μ˜ μˆ˜κ°€ μ•„λ‹ˆλΌμ„œ dp둜 ν’€μ΄ν–ˆλ‹€.
9+
10+
# [λ³΅μž‘λ„]
11+
# C: μ½”μΈμ˜ 개수, # A: amount
12+
# μ‹œκ°„ λ³΅μž‘λ„: O(A * C)
13+
# 곡간 λ³΅μž‘λ„: O(A)
14+
class Solution:
15+
def coinChange(self, coins: List[int], amount: int) -> int:
16+
NOT_POSSIBLE = amount + 1
17+
18+
# min_coins: κΈˆμ•‘μ„ λ§Œλ“œλŠ”λ° ν•„μš”ν•œ 동전 개수λ₯Ό μ €μž₯ν•˜λŠ” λ°°μ—΄
19+
# min_coins[i]: i원을 λ§Œλ“œλŠ”λ° ν•„μš”ν•œ μ΅œμ†Œ λ™μ „μ˜ 개수
20+
min_coins = [NOT_POSSIBLE] * (amount + 1)
21+
min_coins[0] = 0
22+
23+
for cur_amount in range(1, amount + 1):
24+
# coin: μ„ νƒν•œ 동전
25+
for coin in coins:
26+
if cur_amount >= coin:
27+
# λ‘˜ 쀑 더 μž‘μ€ κ°’μœΌλ‘œ μ—…λ°μ΄νŠΈ
28+
# 1. 기쑴에 κ΅¬ν•œ 개수
29+
# 2. ν˜„μž¬ 동전을 1개 μΆ”κ°€ν•΄μ„œ λ§Œλ“œλŠ” 개수
30+
min_coins[cur_amount] = min(min_coins[cur_amount], min_coins[cur_amount - coin] + 1)
31+
32+
# μ΄ˆκΈ°ν™”λœ κ°’ κ·ΈλŒ€λ‘œμ΄λ©΄ λΆˆκ°€λŠ₯ν•œ μ‘°ν•©μ΄λ―€λ‘œ -1 λ°˜ν™˜
33+
if min_coins[amount] == NOT_POSSIBLE:
34+
return -1
35+
# μ΅œμ†Œ λ™μ „μ˜ 개수λ₯Ό λ°˜ν™˜
36+
else:
37+
return min_coins[amount]

0 commit comments

Comments
Β (0)