From a666e60b0ee1c5b28bb6ac15b12b8038fc45a66c Mon Sep 17 00:00:00 2001 From: Ukj0ng <90972240+Ukj0ng@users.noreply.github.com> Date: Thu, 18 Dec 2025 12:49:45 +0900 Subject: [PATCH] =?UTF-8?q?[20251218]=20BOJ=20/=20G4=20/=20=EB=93=9C?= =?UTF-8?q?=EB=9E=98=EA=B3=A4=20=EC=95=A4=20=EB=8D=98=EC=A0=84=20/=20?= =?UTF-8?q?=ED=95=9C=EC=A2=85=EC=9A=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ... \354\225\244 \353\215\230\354\240\204.md" | 78 +++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 "Ukj0ng/202512/18 BOJ G4 \353\223\234\353\236\230\352\263\244 \354\225\244 \353\215\230\354\240\204.md" diff --git "a/Ukj0ng/202512/18 BOJ G4 \353\223\234\353\236\230\352\263\244 \354\225\244 \353\215\230\354\240\204.md" "b/Ukj0ng/202512/18 BOJ G4 \353\223\234\353\236\230\352\263\244 \354\225\244 \353\215\230\354\240\204.md" new file mode 100644 index 00000000..e9ffba26 --- /dev/null +++ "b/Ukj0ng/202512/18 BOJ G4 \353\223\234\353\236\230\352\263\244 \354\225\244 \353\215\230\354\240\204.md" @@ -0,0 +1,78 @@ +``` +import java.io.*; +import java.util.StringTokenizer; + +public class Main { + private static final BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + private static final BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + private static int[][] rooms; + private static int N; + private static long atk; + + public static void main(String[] args) throws IOException { + init(); + long answer = binarySearch(); + + bw.write(answer + "\n"); + bw.flush(); + bw.close(); + br.close(); + } + + private static void init() throws IOException { + StringTokenizer st = new StringTokenizer(br.readLine()); + N = Integer.parseInt(st.nextToken()); + atk = Long.parseLong(st.nextToken()); + + rooms = new int[N+1][3]; + + for (int i = 1; i <= N; i++) { + st = new StringTokenizer(br.readLine()); + rooms[i][0] = Integer.parseInt(st.nextToken()); + rooms[i][1] = Integer.parseInt(st.nextToken()); + rooms[i][2] = Integer.parseInt(st.nextToken()); + } + } + + private static long binarySearch() { + long left = 1; + long right = (long) 9e18; + long result = 0; + + while (left <= right) { + long mid = left + (right - left) / 2; + + if (valid(mid, atk)) { + result = mid; + right = mid-1; + } else { + left = mid+1; + } + } + + return result; + } + + private static boolean valid (long hp, long atk) { + long maxHp = hp; + + for (int i = 1; i <= N; i++) { + if (rooms[i][0] == 1) { + long turn = rooms[i][2] / atk - 1; + if (rooms[i][2] % atk > 0) turn++; + turn = Math.max(turn, 0); + hp -= turn * (long)rooms[i][1]; + if (hp <= 0) { + return false; + } + } else { + atk += rooms[i][1]; + hp += rooms[i][2]; + hp = Math.min(hp, maxHp); + } + } + + return true; + } +} +```