algorithm/DP
[백준22115/골드5] 창영이와 커피 - Python
ayeongjin
2025. 2. 10. 14:12
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)