Skip to content

Commit ca7f3b9

Browse files
committed
feat: Solve coin-change problem
1 parent 9d9a596 commit ca7f3b9

File tree

1 file changed

+63
-0
lines changed

1 file changed

+63
-0
lines changed

β€Žcoin-change/hu6r1s.py

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
from collections import deque
2+
3+
class Solution:
4+
"""
5+
1. κ°€μž₯ 큰 μˆ˜λΆ€ν„° μ°¨λ‘€λŒ€λ‘œ λΉΌλ©΄μ„œ 확인 - ν‹€λ¦° 풀이
6+
κ°€μž₯ 큰 μˆ˜λΆ€ν„° μ°¨λ‘€λŒ€λ‘œ λΉΌλ©΄ μ•ˆλ˜λŠ” κ²½μš°κ°€ 있음
7+
coins = [186,419,83,408], amount = 6249
8+
이건 419λΆ€ν„° μ•ˆλ λ•ŒκΉŒμ§€ λΉΌλŠ” λ°©μ‹μœΌλ‘œ λ˜μ§€ μ•ŠμŒ, 즉 졜적의 κΈˆμ•‘μ„ μ°Ύμ•„μ•Ό 함.
9+
그리디 같은 문제일 λ“―
10+
11+
"""
12+
"""
13+
def coinChange(self, coins: List[int], amount: int) -> int:
14+
if amount == 0:
15+
return 0
16+
17+
coins.sort(reverse=True)
18+
result = 0
19+
for coin in coins:
20+
while amount >= coin:
21+
amount -= coin
22+
result += 1
23+
24+
if amount:
25+
return -1
26+
return result
27+
"""
28+
"""
29+
- BFSλ₯Ό μ‚¬μš©ν•˜μ—¬ "동전 ν•©"을 0μ—μ„œ μ‹œμž‘ν•΄ amountκΉŒμ§€ λ„λ‹¬ν•˜λŠ” μ΅œμ†Œ 단계λ₯Ό 탐색
30+
- 큐의 μ›μ†Œ: (cnt, total)
31+
cnt : ν˜„μž¬κΉŒμ§€ μ‚¬μš©ν•œ 동전 개수
32+
total : ν˜„μž¬κΉŒμ§€ λ§Œλ“  ν•©
33+
- visited μ§‘ν•©μœΌλ‘œ 이미 λ°©λ¬Έν•œ 합을 쀑볡 νƒμƒ‰ν•˜μ§€ μ•Šκ²Œ 함
34+
- 첫 번째둜 amount에 λ„λ‹¬ν•˜λŠ” μˆœκ°„μ΄ μ΅œμ†Œ 동전 개수 (BFS νŠΉμ„±μƒ)
35+
36+
μ‹œκ°„ λ³΅μž‘λ„:
37+
- μ΅œμ•…μ˜ 경우 λͺ¨λ“  ν•©(0 ~ amount)을 νƒμƒ‰ν•˜λ©°,
38+
각 ν•©μ—μ„œ μ΅œλŒ€ len(coins)개의 μƒˆλ‘œμš΄ μƒνƒœλ₯Ό 큐에 λ„£μŒ
39+
- O(amount Γ— n), n = len(coins)
40+
41+
곡간 λ³΅μž‘λ„:
42+
- visited μ§‘ν•©: μ΅œλŒ€ amount+1 크기
43+
- 큐(queue): μ΅œμ•…μ˜ 경우 O(amount Γ— n) μƒνƒœ μ €μž₯ κ°€λŠ₯
44+
- O(amount)
45+
"""
46+
def coinChange(self, coins: List[int], amount: int) -> int:
47+
def bfs():
48+
queue = deque([(0, 0)])
49+
visited = set()
50+
while queue:
51+
cnt, total = queue.popleft()
52+
if amount == total:
53+
return cnt
54+
if total in visited:
55+
continue
56+
visited.add(total)
57+
58+
for coin in coins:
59+
if coin + total <= amount:
60+
queue.append((cnt + 1, total + coin))
61+
return -1
62+
63+
return bfs()

0 commit comments

Comments
Β (0)