[BOJ] 2294_동전2

ziooΒ·2022λ…„ 4μ›” 18일
0

πŸ“ƒ 동전2

풀이

각 κ°’λ§ˆλ‹€ ν•„μš”ν•œ μ΅œμ†Œμ˜ 코인 갯수λ₯Ό μ €μž₯ν•  dp λ°°μ—΄ ν•„μš”

  1. 데이터듀을 1차원 배열에 λ‹΄λŠ”λ‹€.
  2. μ΅œμ†Œ 코인 갯수λ₯Ό μ €μž₯ν•  dp배열을 λ§Œλ“€κ³  max(10001)으둜 μ΄ˆκΈ°ν™”μ‹œμΌœμ€€λ‹€.
  3. 코인 λ°°μ—΄μ˜ 값을 κ°€μ Έμ˜€κ³ 
  4. κ·Έ κ°’λ§ŒνΌ μ˜¬λ¦¬λ©΄μ„œ for문을 λŒμ•„μ£ΌλŠ”λ°
  5. ν˜„μž¬ κ°’μ—μ„œ κ°€μ Έμ˜¨ 코인 값을 λΉΌμ£Όμ—ˆμ„ λ•Œμ˜ 코인 μ‚¬μš© κ°œμˆ˜μ— μ§€κΈˆ 코인 개수 ν•˜λ‚˜λ₯Ό λ”ν•œ κ°’κ³Ό 이전 μ½”μΈλ“€λ‘œλ§Œ μ‘°ν•©ν–ˆμ„ λ•Œ μ‚¬μš©λœ 코인 개수λ₯Ό λΉ„κ΅ν•˜μ—¬ 더 μž‘μ€ 값을 dp배열에 λ‹΄λŠ”λ‹€.

μ½”λ“œ

import sys
input = sys.stdin.readline
n, k = map(int, input().split())

li =[]

for i in range(n):
   li.append(int(input()))

dp = [10001] * (k+1)
dp[0] = 0

for num in li:
   for i in range(num, k+1):
       dp[i] = min(dp[i],dp[i-num]+1)
if dp[k] == 10001:
   print(-1)
else:
   print(dp[k])

0개의 λŒ“κΈ€

κ΄€λ ¨ μ±„μš© 정보