From 8515376b134c6702b5d2b8a54c25b1f47ef46871 Mon Sep 17 00:00:00 2001 From: Donew <47556347+03do-new30@users.noreply.github.com> Date: Tue, 11 Feb 2025 21:08:31 +0900 Subject: [PATCH 1/2] =?UTF-8?q?[20250211]=20BOJ=20/=20=EA=B3=A8=EB=93=9C5?= =?UTF-8?q?=20/=20=EC=B0=BD=EC=98=81=EC=9D=B4=EC=99=80=20=EC=BB=A4?= =?UTF-8?q?=ED=94=BC=20/=20=EC=8B=A0=EB=8F=99=EC=9C=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...4\354\231\200 \354\273\244\355\224\274.md" | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 "03do-new30/202502/11 BOJ G5 \354\260\275\354\230\201\354\235\264\354\231\200 \354\273\244\355\224\274.md" diff --git "a/03do-new30/202502/11 BOJ G5 \354\260\275\354\230\201\354\235\264\354\231\200 \354\273\244\355\224\274.md" "b/03do-new30/202502/11 BOJ G5 \354\260\275\354\230\201\354\235\264\354\231\200 \354\273\244\355\224\274.md" new file mode 100644 index 00000000..b90b858d --- /dev/null +++ "b/03do-new30/202502/11 BOJ G5 \354\260\275\354\230\201\354\235\264\354\231\200 \354\273\244\355\224\274.md" @@ -0,0 +1,65 @@ +```java +package BOJ; + +import java.io.*; +import java.util.*; + +public class Main { + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + + StringTokenizer st = new StringTokenizer(br.readLine()); + int N = Integer.parseInt(st.nextToken()); + int K = Integer.parseInt(st.nextToken()); + + int[] cups = new int[N+1]; + st = new StringTokenizer(br.readLine()); + for (int i = 1; i < N+1; i++) { + cups[i] = Integer.parseInt(st.nextToken()); + } + + // dp[i][j] = 카페인 i를 채우기 위해 커피 j까지 고려했을 때 최소 잔 수 + int[][] dp = new int[K+1][N+1]; + + // 초기화 + int maxCups = 101; + for (int i = 0; i < K+1; i++) { + for (int j = 0; j < N+1; j++) { + if (i == 0) { + dp[i][j] = 0; + continue; + } + dp[i][j] = maxCups; + } + } + + for (int caffeine = 1; caffeine < K+1; caffeine++) { + for (int coffee = 1; coffee < N+1; coffee++) { + // coffee번째 커피를 마시는 경우 + if (caffeine - cups[coffee] >= 0) { + dp[caffeine][coffee] = Integer.min(dp[caffeine][coffee], dp[caffeine-cups[coffee]][coffee-1] + 1); + } + // coffee번째 커피를 마시지 않는다면, caffine을 채우기 위해 coffee-1번째 커피까지 고려했을 때의 최소값이 dp[caffeine][coffee]가 됨 + dp[caffeine][coffee] = Integer.min(dp[caffeine][coffee], dp[caffeine][coffee-1]); + } + } + + int answer = maxCups; + for (int coffee = 1; coffee < N+1; coffee++) { + if (dp[K][coffee] < answer) { + answer = dp[K][coffee]; + } + } + if (answer == maxCups) { + answer = -1; + } + bw.write(answer + "\n"); + + br.close(); + bw.flush(); + bw.close(); + } +} + +``` From 14f6bb7cf357f051334262515b6d687fa28665b8 Mon Sep 17 00:00:00 2001 From: Donew <47556347+03do-new30@users.noreply.github.com> Date: Tue, 11 Feb 2025 21:16:35 +0900 Subject: [PATCH 2/2] =?UTF-8?q?[20250211]=20BOJ=20/=20=EA=B3=A8=EB=93=9C5?= =?UTF-8?q?=20/=20=EC=B0=BD=EC=98=81=EC=9D=B4=EC=99=80=20=EC=BB=A4?= =?UTF-8?q?=ED=94=BC=20/=20=EC=8B=A0=EB=8F=99=EC=9C=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...235\264\354\231\200 \354\273\244\355\224\274.md" | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git "a/03do-new30/202502/11 BOJ G5 \354\260\275\354\230\201\354\235\264\354\231\200 \354\273\244\355\224\274.md" "b/03do-new30/202502/11 BOJ G5 \354\260\275\354\230\201\354\235\264\354\231\200 \354\273\244\355\224\274.md" index b90b858d..a1b4935c 100644 --- "a/03do-new30/202502/11 BOJ G5 \354\260\275\354\230\201\354\235\264\354\231\200 \354\273\244\355\224\274.md" +++ "b/03do-new30/202502/11 BOJ G5 \354\260\275\354\230\201\354\235\264\354\231\200 \354\273\244\355\224\274.md" @@ -1,6 +1,4 @@ ```java -package BOJ; - import java.io.*; import java.util.*; @@ -36,21 +34,16 @@ public class Main { for (int caffeine = 1; caffeine < K+1; caffeine++) { for (int coffee = 1; coffee < N+1; coffee++) { + // (default) coffee번째 커피를 마시지 않는다면, caffine을 채우기 위해 coffee-1번째 커피까지 고려했을 때의 최소값이 dp[caffeine][coffee]가 됨 + dp[caffeine][coffee] = dp[caffeine][coffee-1]; // coffee번째 커피를 마시는 경우 if (caffeine - cups[coffee] >= 0) { dp[caffeine][coffee] = Integer.min(dp[caffeine][coffee], dp[caffeine-cups[coffee]][coffee-1] + 1); } - // coffee번째 커피를 마시지 않는다면, caffine을 채우기 위해 coffee-1번째 커피까지 고려했을 때의 최소값이 dp[caffeine][coffee]가 됨 - dp[caffeine][coffee] = Integer.min(dp[caffeine][coffee], dp[caffeine][coffee-1]); } } - int answer = maxCups; - for (int coffee = 1; coffee < N+1; coffee++) { - if (dp[K][coffee] < answer) { - answer = dp[K][coffee]; - } - } + int answer = dp[K][N]; if (answer == maxCups) { answer = -1; }