File tree Expand file tree Collapse file tree 1 file changed +58
-0
lines changed
Expand file tree Collapse file tree 1 file changed +58
-0
lines changed Original file line number Diff line number Diff line change 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+ ```
You can’t perform that action at this time.
0 commit comments