https://www.acmicpc.net/problem/22115
dp 다 까먹어서 요즘 dp 문제를 풀었다.
이 문제는 9465번 스티커처럼 커피를 마실때, 안마실 때 구분해서 dp 배열에 저장해서 풀면 되는 줄 알고 엄청 헤맸다.
14782 벼락치기처럼 dp 배열을 바꿨더니 풀렸다.
1. dp K+1 크기의 1차원 리스트로 생성
2. 커피 하나씩 순회하면서 그 커피를 마실 때 가능한 카페인 합 거꾸로 순회하면서 커피의 최솟값 갱신
N, K = map(int, input().split())
coffees = list(map(int, input().split()))
dp = [float('inf')] * (K + 1)
dp[0] = 0
for c in coffees:
# 전체 카페인을 하나씩 거꾸로 순회하면서 현재 커피를 마실 경우 커피 수의 최솟값 갱신
for i in range(K, c - 1, -1):
dp[i] = min(dp[i], dp[i - c] + 1)
print(dp[K] if dp[K] != float('inf') else -1)
'algorithm > DP' 카테고리의 다른 글
[백준2240/골드5] 자두나무 - Python (0) | 2025.04.09 |
---|---|
[백준11057/실버1] 오르막 수 - Python (0) | 2025.02.04 |
[백준11909/골드5] 배열 탈출 - Python (0) | 2025.01.26 |
Dynamic Programming 동적계획법 (0) | 2025.01.14 |
[백준15989/골5] 1, 2, 3 더하기 4 - Python (0) | 2025.01.06 |