Skip to content

Commit 1da388c

Browse files
committed
[7th batch] week 4 - coin change
1 parent ede4dae commit 1da388c

1 file changed

Lines changed: 38 additions & 0 deletions

File tree

โ€Žcoin-change/liza0525.pyโ€Ž

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
# 7๊ธฐ ํ’€์ด
2+
# ์‹œ๊ฐ„ ๋ณต์žก๋„: O(n * k)
3+
# - ํƒ€๊ฒŸ ์ฝ”์ธ ๊ฐ’(amount, ๋ณต์žก๋„ ๊ณ„์‚ฐ์—์„  n์œผ๋กœ ํ‘œ๊ธฐ)๊ณผ coins์˜ ๊ธธ์ด ๋งŒํผ ํƒ์ƒ‰ํ•˜๋ฉฐ ๊ณ„์‚ฐ
4+
# ๊ณต๊ฐ„ ๋ณต์žก๋„: O(n)
5+
# - ํƒ€๊ฒŸ ์ฝ”์ธ ๊ฐ’(amount, ๋ณต์žก๋„ ๊ณ„์‚ฐ์—์„  n์œผ๋กœ ํ‘œ๊ธฐ) ๋งŒํผ์˜ min_coin_count ๊ณ„์‚ฐ array๋ฅผ ์ƒ์„ฑ
6+
class Solution:
7+
# ํ•ด๋‹น ๋ฌธ์ œ๋Š” ํ˜„์žฌ ๊ฐ–๊ณ  ์žˆ๋Š” ๋ˆ์œผ๋กœ ๊ฐ ์ฝ”์ธ ๊ฐ’์„ ๋งŒ๋“œ๋Š” ๋ฐ์— ๋™์ „์„ ์–ผ๋งˆ๋‚˜ ์“ฐ๋Š”์ง€ ๊ณ„์‚ฐํ•˜์—ฌ
8+
# ๊ทธ ์กฐํ•ฉ ์ค‘ ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์„ ๊ณ„์† ์ฐพ์•„๊ฐ€๋Š” ๋ฌธ์ œ๋กœ, min_coin_count๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
9+
def coinChange(self, coins: List[int], amount: int) -> int:
10+
min_coin_count = [-1 for _ in range(amount + 1)] # ๊ฐ ์ธ๋ฑ์Šค๋Š” ์ฝ”์ธ ๊ฐ’, value๋Š” ํ•ด๋‹น ์ฝ”์ธ ๊ฐ’์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๋™์ „์˜ ๊ฐœ์ˆ˜(๋งŒ๋“ค ์ˆ˜ ์—†์„ ๋• -1)
11+
min_coin_count[0] = 0 # ์ฝ”์ธ ๊ฐ’์ด 0์ผ ๋•Œ๋Š” ๋™์ „์„ ์“ฐ์ง€ ์•Š์œผ๋ฉด ๋˜๋ฏ€๋กœ ๋ฌด์กฐ๊ฑด 0์ด ๋œ๋‹ค.
12+
13+
for target_amount in range(1, len(min_coin_count)):
14+
# ๊ฐ ์ฝ”์ธ ๊ฐ’์— ๋Œ€ํ•ด ์ตœ์†Œ ๋™์ „ ๊ฐœ์ˆ˜๋ฅผ ์ฐพ๋Š”๋‹ค.
15+
for coin in coins:
16+
if target_amount - coin < 0:
17+
# ๋Œ€์ƒ ์ฝ”์ธ ๊ฐ’๋ณด๋‹ค ์ฒดํฌํ•  ์ฝ”์ธ ๊ฐ’์ด ํฐ ๊ฒฝ์šฐ์—๋Š” ์กฐํ•ฉ์„ ๋งŒ๋“ค ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ๋„˜๊ธด๋‹ค
18+
continue
19+
if min_coin_count[target_amount - coin] < 0:
20+
# target_amount - coin(๋ณด์ˆ˜)์„ ๋งŒ๋“ค ์ˆ˜ ์—†์œผ๋ฉด target_amount๋„ ๋งŒ๋“ค ์ˆ˜ ์—†์Œ
21+
# ์˜ˆ์‹œ) target=5, coin=3 โ†’ ๋ณด์ˆ˜ 2๋ฅผ ๋ชป ๋งŒ๋“ค๋ฉด 5๋„ ๋ชป ๋งŒ๋“ฆ
22+
continue
23+
24+
# ์œ„ ๋‘ ๊ฐ€์ง€ ์กฐ๊ฑด๋งŒ ๋„˜์–ด๊ฐ€๋ฉด ๋™์ „ ๊ฐœ์ˆ˜๋ฅผ min_coin_count[target_amount]์— ์ •ํ•ด์„œ ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ์˜๋ฏธ
25+
if min_coin_count[target_amount] == -1:
26+
# ๊ฐ’์ด -1์ธ ๊ฒฝ์šฐ์—๋Š” ์ฒ˜์Œ์œผ๋กœ ๊ณ„์‚ฐํ•ด์„œ ๋„ฃ๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์—
27+
# min_coin_count[target_amount - coin]์—๋‹ค๊ฐ€ 1์„ ๋”ํ•ด์„œ(coin ํ•œ ๊ฐœ๋ฅผ ์ถ”๊ฐ€ ํ•œ๋‹ค๋Š” ์˜๋ฏธ) min_coin_count[target_amount]์— ํ• ๋‹น
28+
min_coin_count[target_amount] = min_coin_count[target_amount - coin] + 1
29+
else:
30+
# ๊ฐ’์ด -1์ด ์•„๋‹Œ ๊ฒฝ์šฐ๋Š” ์ด์ „์— ์ €์žฅ๋œ ๋™์ „ ๊ฐœ์ˆ˜๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ
31+
# ์ด์ „ ๊ฒฐ๊ณผ ๊ฐ’๊ณผ min_coin_count[target_amount - coin] + 1์˜ ๊ฐ’์„ ๋น„๊ตํ•˜์—ฌ ๋” ์ ์€ ์ˆ˜๋ฅผ ์ €์žฅํ•œ๋‹ค.
32+
min_coin_count[target_amount] = min(
33+
min_coin_count[target_amount],
34+
min_coin_count[target_amount - coin] + 1
35+
)
36+
37+
# ๋ชจ๋‘ ๊ณ„์‚ฐํ•œ ํ›„ min_coin_count[amount]๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. (== amount๋ฅผ ๋งŒ๋“œ๋Š” ๋™์ „์˜ ์ตœ์†Œ ๊ฐœ์ˆ˜)
38+
return min_coin_count[amount]

0 commit comments

Comments
ย (0)