[Gold V] Title: 동전 2, Time: 232 ms, Memory: 33432 KB -BaekjoonHub

This commit is contained in:
SSUM
2026-01-07 21:21:38 +09:00
parent 9ea79f63ad
commit 2925d3c224
2 changed files with 47 additions and 0 deletions

View File

@@ -0,0 +1,28 @@
# [Gold V] 동전 2 - 2294
[문제 링크](https://www.acmicpc.net/problem/2294)
### 성능 요약
메모리: 33432 KB, 시간: 232 ms
### 분류
다이나믹 프로그래밍
### 제출 일자
2026년 1월 7일 21:21:28
### 문제 설명
<p>n가지 종류의 동전이 있다. 이 동전들을 적당히 사용해서, 그 가치의 합이 k원이 되도록 하고 싶다. 그러면서 동전의 개수가 최소가 되도록 하려고 한다. 각각의 동전은 몇 개라도 사용할 수 있다.</p>
### 입력
<p>첫째 줄에 n, k가 주어진다. (1 ≤ n ≤ 100, 1 ≤ k ≤ 10,000) 다음 n개의 줄에는 각각의 동전의 가치가 주어진다. 동전의 가치는 100,000보다 작거나 같은 자연수이다. 가치가 같은 동전이 여러 번 주어질 수도 있다.</p>
### 출력
<p>첫째 줄에 사용한 동전의 최소 개수를 출력한다. 불가능한 경우에는 -1을 출력한다.</p>

View File

@@ -0,0 +1,19 @@
import sys
input = sys.stdin.readline
max_value = sys.maxsize
n, k = map(int, input().split())
value = []
for _ in range(n):
value.append(int(input()))
dp = [max_value] * (k + 1)
dp[0] = 0
value = sorted(set(value))
for v in value:
for i in range(v, k + 1):
if dp[i - v] + 1 < dp[i]:
dp[i] = dp[i - v] + 1
print(dp[k] if dp[k] != max_value else -1)