From e38c4c2fd5f99cc88db445bb6e7bd6a1531fce8c Mon Sep 17 00:00:00 2001 From: zinnnn37 <102711874+zinnnn37@users.noreply.github.com> Date: Sat, 31 Jan 2026 20:43:12 +0900 Subject: [PATCH] =?UTF-8?q?[20250131]=20BOJ=20/=20G1=20/=20=EB=B6=80?= =?UTF-8?q?=EB=B6=84=EC=88=98=EC=97=B4=EC=9D=98=20=ED=95=A9=202=20/=20?= =?UTF-8?q?=EA=B9=80=EB=AF=BC=EC=A7=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...354\227\264\354\235\230 \355\225\251 2.md" | 82 +++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 "zinnnn37/202601/31 BOJ G1 \353\266\200\353\266\204\354\210\230\354\227\264\354\235\230 \355\225\251 2.md" diff --git "a/zinnnn37/202601/31 BOJ G1 \353\266\200\353\266\204\354\210\230\354\227\264\354\235\230 \355\225\251 2.md" "b/zinnnn37/202601/31 BOJ G1 \353\266\200\353\266\204\354\210\230\354\227\264\354\235\230 \355\225\251 2.md" new file mode 100644 index 00000000..1c7fd75c --- /dev/null +++ "b/zinnnn37/202601/31 BOJ G1 \353\266\200\353\266\204\354\210\230\354\227\264\354\235\230 \355\225\251 2.md" @@ -0,0 +1,82 @@ +```java +import java.io.*; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; +import java.util.StringTokenizer; + +public class BJ_1208_부분수열의_합_2 { + + private static final BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + private static final BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + private static StringTokenizer st; + + private static int N, S; + private static int[] arr; + private static Map left, right; + + public static void main(String[] args) throws IOException { + init(); + sol(); + } + + private static void init() throws IOException { + st = new StringTokenizer(br.readLine()); + N = Integer.parseInt(st.nextToken()); + S = Integer.parseInt(st.nextToken()); + + arr = new int[N]; + st = new StringTokenizer(br.readLine()); + for (int i = 0; i < N; i++) { + arr[i] = Integer.parseInt(st.nextToken()); + } + Arrays.sort(arr); + + left = new HashMap<>(); + right = new HashMap<>(); + } + + private static void sol() throws IOException { + int mid = N / 2; + int bit = (1 << mid); + for (int mask = 0; mask < bit; mask++) { + int sum = 0; + for (int idx = 0; idx < mid; idx++) { + if ((mask & (1 << idx)) != 0) { + sum += arr[idx]; + } + } + left.put(sum, left.getOrDefault(sum, 0) + 1); + } + + int rightSize = N - mid; + bit = (1 << rightSize); + for (int mask = 0; mask < bit; mask++) { + int sum = 0; + for (int idx = 0; idx < rightSize; idx++) { + if ((mask & (1 << idx)) != 0) { + sum += arr[mid + idx]; + } + } + right.put(sum, right.getOrDefault(sum, 0) + 1); + } + + long ans = 0; + for (int key : left.keySet()) { + if (right.containsKey(S - key)) { + ans += (long) left.get(key) * (right.get(S - key)); + } + } + + if (S == 0) { + ans--; + } + + bw.write(ans + ""); + bw.flush(); + bw.close(); + br.close(); + } + +} +```