부등호
문제내용 n가지 종류의 동전이 있다. 이 동전들을 적당히 사용해서, 그 가치의 합이 k원이 되도록 하고 싶다. 그러면서 동전의 개수가 최소가 되도록 하려고 한다. 각각의 동전은 몇 개라도 사용할 수 있다. 사용한 동전의 구성이 같은데, 순서만 다른 것은 같은 경우이다. 입력방식 첫째 줄에 n, k가 주어진다. (1 ≤ n ≤ 100, 1 ≤ k ≤ 10,000) 다음 n개의 줄에는 각각의 동전의 가치가 주어진다. 동전의 가치는 100,000보다 작거나 같은 자연수이다. 가치가 같은 동전이 여러 번 주어질 수도 있다. |
프로그래밍 순서
1.dp 리스트 만들기
2.모든 종류의 동전으로 dp 리스트를 모두 돈다.
2-1 현재 dp 리스트의 값과 현재 동전으로의 값 중 최소가 되는 값으로 업데이트한다.
3. 만약에 dp 리스트의 값이 10001이면 동전으로 해당 가치를 만들 수 없는 것이기 때문에 -1로 변경한다.
전체코딩
- 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
# 입력
n, k = map(int, input().split())
data = sorted([int(input()) for _ in range(n)])
dp = [10001] * (k+1)
dp[0] = 0
# 동전의 최소 개수 구하기
for coin in data:
for i in range(coin, k+1):
dp[i] = min(dp[i], dp[i-coin]+1)
# 만약 가진 동전으로 k 값이 나오지 않는 경우
if dp[-1] == 10001:
dp[-1] = -1
# 출력
print(dp[-1])
|
'Algorithm > Baekjoon' 카테고리의 다른 글
[백준/골드2] [1202] 보석도둑 - python, Pypy 3 (0) | 2022.06.06 |
---|---|
[백준/실버2] [2529] 부등호 - python, Pypy 3 (0) | 2022.05.26 |
[백준/골드4] [20040] 사이클 게임 - python, Pypy 3 (0) | 2022.05.21 |
[백준/실버4] [10816] 숫자카드2 - python, Pypy 3 (0) | 2022.05.21 |