From 8102cec5a6d4cd00b85846ce2272fc1976b63878 Mon Sep 17 00:00:00 2001 From: lkhyun <102892446+lkhyun@users.noreply.github.com> Date: Tue, 11 Feb 2025 14:21:26 +0900 Subject: [PATCH] =?UTF-8?q?[20250211]=20BOJ=20/=20=EA=B3=A8=EB=93=9C4=20/?= =?UTF-8?q?=20=EC=A0=84=EA=B8=B0=EC=9A=94=EA=B8=88=20/=20=EC=9D=B4?= =?UTF-8?q?=EA=B0=95=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...04\352\270\260\354\232\224\352\270\210.md" | 58 +++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 "lkhyun/202502/11 BOJ \352\263\250\353\223\2344 \354\240\204\352\270\260\354\232\224\352\270\210.md" diff --git "a/lkhyun/202502/11 BOJ \352\263\250\353\223\2344 \354\240\204\352\270\260\354\232\224\352\270\210.md" "b/lkhyun/202502/11 BOJ \352\263\250\353\223\2344 \354\240\204\352\270\260\354\232\224\352\270\210.md" new file mode 100644 index 00000000..e67f07aa --- /dev/null +++ "b/lkhyun/202502/11 BOJ \352\263\250\353\223\2344 \354\240\204\352\270\260\354\232\224\352\270\210.md" @@ -0,0 +1,58 @@ +```java +import java.util.*; +import java.io.*; + +public class Main { + static int A; + static int B; + static int totalUse; + + public static void main(String[] args) throws Exception { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + StringTokenizer st = new StringTokenizer(br.readLine()); + + while (st.hasMoreTokens()) { + A = Integer.parseInt(st.nextToken()); // 총 사용량에 기반한 요금 + B = Integer.parseInt(st.nextToken()); // 요금 차이 + if (A == 0 && B == 0) break; + + totalUse = convertToUse(A); // 총 사용량(상한) + int use1 = binarySearch(0, totalUse); // 상근이의 사용 요금 + int use2 = totalUse-use1; + bw.write(Math.min(convertToFee(use1),convertToFee(use2)) +"\n"); + st = new StringTokenizer(br.readLine()); + } + + bw.flush(); + } + + public static int binarySearch(int left, int right) { + while (left <= right) { + int mid = (left + right) / 2; + int sangeunFee = convertToFee(mid); + int nextToFee = convertToFee(totalUse - mid); + + if (Math.abs(nextToFee - sangeunFee) == B) return mid; + else if (Math.abs(nextToFee - sangeunFee) < B) right = mid - 1; + else left = mid + 1; + } + return left; + } + + public static int convertToFee(int use) { // 사용량 -> 요금 + if (use > 1000000) return 4979900 + (use - 1000000) * 7; + if (use > 10000) return 29900 + (use - 10000) * 5; + if (use > 100) return 200 + (use - 100) * 3; + return use * 2; + } + + public static int convertToUse(int fee) { // 요금 -> 사용량 + if (fee > 4979900) return 1000000 + (fee - 4979900) / 7; + if (fee > 29900) return 10000 + (fee - 29900) / 5; + if (fee > 200) return 100 + (fee - 200) / 3; + return fee / 2; + } +} + +```