Skip to content

Commit 78f3031

Browse files
authored
Merge pull request #87 from AlgorithmWithGod/03do-new30
[20250211] BOJ / 골드5 / 창영이와 커피 / 신동윤
2 parents 594dec4 + 14f6bb7 commit 78f3031

File tree

1 file changed

+58
-0
lines changed

1 file changed

+58
-0
lines changed
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
```java
2+
import java.io.*;
3+
import java.util.*;
4+
5+
public class Main {
6+
public static void main(String[] args) throws IOException {
7+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
8+
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
9+
10+
StringTokenizer st = new StringTokenizer(br.readLine());
11+
int N = Integer.parseInt(st.nextToken());
12+
int K = Integer.parseInt(st.nextToken());
13+
14+
int[] cups = new int[N+1];
15+
st = new StringTokenizer(br.readLine());
16+
for (int i = 1; i < N+1; i++) {
17+
cups[i] = Integer.parseInt(st.nextToken());
18+
}
19+
20+
// dp[i][j] = 카페인 i를 채우기 위해 커피 j까지 고려했을 때 최소 잔 수
21+
int[][] dp = new int[K+1][N+1];
22+
23+
// 초기화
24+
int maxCups = 101;
25+
for (int i = 0; i < K+1; i++) {
26+
for (int j = 0; j < N+1; j++) {
27+
if (i == 0) {
28+
dp[i][j] = 0;
29+
continue;
30+
}
31+
dp[i][j] = maxCups;
32+
}
33+
}
34+
35+
for (int caffeine = 1; caffeine < K+1; caffeine++) {
36+
for (int coffee = 1; coffee < N+1; coffee++) {
37+
// (default) coffee번째 커피를 마시지 않는다면, caffine을 채우기 위해 coffee-1번째 커피까지 고려했을 때의 최소값이 dp[caffeine][coffee]가 됨
38+
dp[caffeine][coffee] = dp[caffeine][coffee-1];
39+
// coffee번째 커피를 마시는 경우
40+
if (caffeine - cups[coffee] >= 0) {
41+
dp[caffeine][coffee] = Integer.min(dp[caffeine][coffee], dp[caffeine-cups[coffee]][coffee-1] + 1);
42+
}
43+
}
44+
}
45+
46+
int answer = dp[K][N];
47+
if (answer == maxCups) {
48+
answer = -1;
49+
}
50+
bw.write(answer + "\n");
51+
52+
br.close();
53+
bw.flush();
54+
bw.close();
55+
}
56+
}
57+
58+
```

0 commit comments

Comments
 (0)