From 44e8cd77990d0e811fe3d9a51c5ff661b891bc18 Mon Sep 17 00:00:00 2001 From: Ukj0ng <90972240+Ukj0ng@users.noreply.github.com> Date: Tue, 26 Aug 2025 13:45:49 +0900 Subject: [PATCH] =?UTF-8?q?[20250826]=20BOJ=20/=20G1=20/=20=EB=82=9C?= =?UTF-8?q?=EB=AF=BC=20/=20=ED=95=9C=EC=A2=85=EC=9A=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../26 BOJ G1 \353\202\234\353\257\274.md" | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 "Ukj0ng/202508/26 BOJ G1 \353\202\234\353\257\274.md" diff --git "a/Ukj0ng/202508/26 BOJ G1 \353\202\234\353\257\274.md" "b/Ukj0ng/202508/26 BOJ G1 \353\202\234\353\257\274.md" new file mode 100644 index 00000000..bd8a097d --- /dev/null +++ "b/Ukj0ng/202508/26 BOJ G1 \353\202\234\353\257\274.md" @@ -0,0 +1,66 @@ +``` +import java.io.*; +import java.util.*; + +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 PriorityQueue upperQueue; + private static PriorityQueue lowerQueue; + private static int N, median; + private static long sum; + public static void main(String[] args) throws IOException { + init(); + + bw.flush(); + bw.close(); + br.close(); + } + + private static void init() throws IOException { + N = Integer.parseInt(br.readLine()); + long upperVal = 0; + long lowerVal = 0; + median = 0; + sum = 0; + long xSum = 0; + + upperQueue = new PriorityQueue<>((o1, o2) -> Integer.compare(o1[1], o2[1])); + lowerQueue = new PriorityQueue<>((o1, o2) -> Integer.compare(o2[1], o1[1])); + + for (int i = 0; i < N; i++) { + StringTokenizer st = new StringTokenizer(br.readLine()); + int x = Integer.parseInt(st.nextToken()); + int y = Integer.parseInt(st.nextToken()); + + lowerQueue.add(new int[]{x, y}); + lowerVal += y; + xSum += Math.abs(x); + + if (upperQueue.size() + 1 == lowerQueue.size()) { + if (!upperQueue.isEmpty() && upperQueue.peek()[1] < lowerQueue.peek()[1]) { + upperVal += (lowerQueue.peek()[1] - upperQueue.peek()[1]); + lowerVal += (upperQueue.peek()[1] - lowerQueue.peek()[1]); + swap(); + } + } else if (upperQueue.size() + 2 == lowerQueue.size()) { + upperVal += lowerQueue.peek()[1]; + lowerVal -= lowerQueue.peek()[1]; + upperQueue.add(lowerQueue.poll()); + } + + median = lowerQueue.peek()[1]; + long ySum = ((long)median * lowerQueue.size() - lowerVal + upperVal - (long)median * upperQueue.size()); + long totalSum = xSum + ySum; + bw.write(median + " " + totalSum + "\n"); + } + } + + private static void swap() { + int[] temp = lowerQueue.poll(); + lowerQueue.add(upperQueue.poll()); + upperQueue.add(temp); + } +} + +```