From 1bba8104f05f35f31de939cc2a6a660cbf91f673 Mon Sep 17 00:00:00 2001 From: 336699go <336699go@gmail.com> Date: Sat, 11 May 2024 01:37:43 +0800 Subject: [PATCH 1/2] boj 2293 --- solutions/baekjoon/2293/Main.java | 77 +++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 solutions/baekjoon/2293/Main.java diff --git a/solutions/baekjoon/2293/Main.java b/solutions/baekjoon/2293/Main.java new file mode 100644 index 0000000..35b8e7c --- /dev/null +++ b/solutions/baekjoon/2293/Main.java @@ -0,0 +1,77 @@ +// Authored by: 336699go +// Co-authored by: - +// Link: http://boj.kr/06a33314bada4e6cbb75b91eb3b4f498 +import java.io.*; +import java.util.*; + +public class Main { + public static void main(String[] args) throws IOException { + FastReader br = new FastReader(); + int n = br.nextInt(); + int k = br.nextInt(); + int[] coins = new int[n]; + int[] dp = new int[k + 1]; + + for (int i = 0; i < n; i++) { + coins[i] = br.nextInt(); + } + + dp[0] = 1; + + for (int i = 0; i < n; i++) { + for (int j = coins[i]; j <= k; j++) { + dp[j] = dp[j] + dp[j - coins[i]]; + } + } + + System.out.println(dp[k]); + } + + static class FastReader { + BufferedReader br; + StringTokenizer st; + + public FastReader() { + br = new BufferedReader(new InputStreamReader(System.in)); + } + + String next() { + while (st == null || !st.hasMoreElements()) { + try { + st = new StringTokenizer(br.readLine()); + } catch (IOException e) { + e.printStackTrace(); + } + } + return st.nextToken(); + } + + int nextInt() { + return Integer.parseInt(next()); + } + + long nextLong() { + return Long.parseLong(next()); + } + + double nextDouble() { + return Double.parseDouble(next()); + } + + String nextLine() { + String str = ""; + try { + str = br.readLine(); + } catch (IOException e) { + e.printStackTrace(); + } + return str; + } + } +} + +/* Solution Description +배낭 문제와 유사하나 1+2, 2+1 같은 중복을 신경 써야 한다. +점화식: dp[j] = dp[j] + dp[j - coins[i]] = i번째 동전까지만 사용해서 가치의 합이 j원이 되는 경우의 수 +메모리 제한이 빡빡해서 dp 배열을 2차원이 아닌 1차원 배열로 해야 한다. +*/ \ No newline at end of file From 9aa51423e6c00821b451709ec06cd6e846712646 Mon Sep 17 00:00:00 2001 From: Minsang Kim Date: Wed, 29 Jan 2025 16:44:10 +0900 Subject: [PATCH 2/2] Update Main.java --- solutions/baekjoon/2293/Main.java | 111 +++++++++++++++--------------- 1 file changed, 56 insertions(+), 55 deletions(-) diff --git a/solutions/baekjoon/2293/Main.java b/solutions/baekjoon/2293/Main.java index 35b8e7c..57d9d32 100644 --- a/solutions/baekjoon/2293/Main.java +++ b/solutions/baekjoon/2293/Main.java @@ -1,77 +1,78 @@ // Authored by: 336699go // Co-authored by: - // Link: http://boj.kr/06a33314bada4e6cbb75b91eb3b4f498 + import java.io.*; import java.util.*; public class Main { - public static void main(String[] args) throws IOException { - FastReader br = new FastReader(); - int n = br.nextInt(); - int k = br.nextInt(); - int[] coins = new int[n]; - int[] dp = new int[k + 1]; + public static void main(String[] args) throws IOException { + FastReader br = new FastReader(); + int n = br.nextInt(); + int k = br.nextInt(); + int[] coins = new int[n]; + int[] dp = new int[k + 1]; - for (int i = 0; i < n; i++) { - coins[i] = br.nextInt(); - } + for (int i = 0; i < n; i++) { + coins[i] = br.nextInt(); + } - dp[0] = 1; + dp[0] = 1; - for (int i = 0; i < n; i++) { - for (int j = coins[i]; j <= k; j++) { - dp[j] = dp[j] + dp[j - coins[i]]; - } - } + for (int i = 0; i < n; i++) { + for (int j = coins[i]; j <= k; j++) { + dp[j] = dp[j] + dp[j - coins[i]]; + } + } - System.out.println(dp[k]); - } + System.out.println(dp[k]); + } - static class FastReader { - BufferedReader br; - StringTokenizer st; + static class FastReader { + BufferedReader br; + StringTokenizer st; - public FastReader() { - br = new BufferedReader(new InputStreamReader(System.in)); - } + public FastReader() { + br = new BufferedReader(new InputStreamReader(System.in)); + } - String next() { - while (st == null || !st.hasMoreElements()) { - try { - st = new StringTokenizer(br.readLine()); - } catch (IOException e) { - e.printStackTrace(); - } - } - return st.nextToken(); - } + String next() { + while (st == null || !st.hasMoreElements()) { + try { + st = new StringTokenizer(br.readLine()); + } catch (IOException e) { + e.printStackTrace(); + } + } + return st.nextToken(); + } - int nextInt() { - return Integer.parseInt(next()); - } + int nextInt() { + return Integer.parseInt(next()); + } - long nextLong() { - return Long.parseLong(next()); - } + long nextLong() { + return Long.parseLong(next()); + } - double nextDouble() { - return Double.parseDouble(next()); - } + double nextDouble() { + return Double.parseDouble(next()); + } - String nextLine() { - String str = ""; - try { - str = br.readLine(); - } catch (IOException e) { - e.printStackTrace(); - } - return str; - } - } + String nextLine() { + String str = ""; + try { + str = br.readLine(); + } catch (IOException e) { + e.printStackTrace(); + } + return str; + } + } } /* Solution Description -배낭 문제와 유사하나 1+2, 2+1 같은 중복을 신경 써야 한다. -점화식: dp[j] = dp[j] + dp[j - coins[i]] = i번째 동전까지만 사용해서 가치의 합이 j원이 되는 경우의 수 +배낭 문제와 유사하나 1+2, 2+1 같은 중복을 신경 써야 한다. +점화식: dp[j] = dp[j] + dp[j - coins[i]] = i번째 동전까지만 사용해서 가치의 합이 j원이 되는 경우의 수 메모리 제한이 빡빡해서 dp 배열을 2차원이 아닌 1차원 배열로 해야 한다. -*/ \ No newline at end of file +*/