From 052370b142965cd44cea2b15d82ac46e6a55e684 Mon Sep 17 00:00:00 2001 From: LiiNi-coder <97495437+LiiNi-coder@users.noreply.github.com> Date: Sun, 20 Jul 2025 19:45:56 +0900 Subject: [PATCH] =?UTF-8?q?[20250720]=20BOJ=20/=20G5=20/=20=EA=B3=84?= =?UTF-8?q?=EB=9E=80=EC=9C=BC=EB=A1=9C=20=EA=B3=84=EB=9E=80=EC=B9=98?= =?UTF-8?q?=EA=B8=B0=20/=20=EC=9D=B4=EC=9D=B8=ED=9D=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...04\353\236\200\354\271\230\352\270\260.md" | 69 +++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 "LiiNi-coder/202507/19 BOJ \352\263\204\353\236\200\354\234\274\353\241\234 \352\263\204\353\236\200\354\271\230\352\270\260.md" diff --git "a/LiiNi-coder/202507/19 BOJ \352\263\204\353\236\200\354\234\274\353\241\234 \352\263\204\353\236\200\354\271\230\352\270\260.md" "b/LiiNi-coder/202507/19 BOJ \352\263\204\353\236\200\354\234\274\353\241\234 \352\263\204\353\236\200\354\271\230\352\270\260.md" new file mode 100644 index 00000000..69060615 --- /dev/null +++ "b/LiiNi-coder/202507/19 BOJ \352\263\204\353\236\200\354\234\274\353\241\234 \352\263\204\353\236\200\354\271\230\352\270\260.md" @@ -0,0 +1,69 @@ +```java +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; + +public class Main { + private static BufferedReader br; + private static int n; + private static int[] ws; + private static int[] ss; + private static int answer; + + public static void main(String[] args) throws IOException { + br = new BufferedReader(new InputStreamReader(System.in)); + n = Integer.parseInt(br.readLine()); + ss = new int[n]; + ws = new int[n]; + for (int i = 0; i < n; i++) { + String[] temp = br.readLine().split(" "); + ss[i] = Integer.parseInt(temp[0]); + ws[i] = Integer.parseInt(temp[1]); + } + answer = 0; + dfs(0); + System.out.println(answer); + br.close(); + } + + private static void dfs(int now) { + if(now == n){ + // 완탐 리프 - 깨진 계란 개수 세기 + int count = 0; + for (int i = 0; i < n; i++) { + if(ss[i] <= 0) count++; + } + answer = Math.max(answer, count); // 반복문 밖으로 이동 + return; + } + + // 현재 계란이 이미 깨져있으면 바로 다음으로 + if(ss[now] <= 0) { + dfs(now + 1); + return; + } + + boolean canHit = false; + + for(int target = 0; target < n; target++) { + if(now == target || ss[target] <= 0) continue; + + canHit = true; + + // 서로 치기 + ss[now] -= ws[target]; + ss[target] -= ws[now]; + + dfs(now + 1); + + // 상태 복구 + ss[now] += ws[target]; + ss[target] += ws[now]; + } + + if(!canHit) { + dfs(now + 1); + } + } +} +```