|
| 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