From d24e3201c1f8b33b04d8eb72581c23496c585492 Mon Sep 17 00:00:00 2001 From: zinnnn37 Date: Mon, 3 Nov 2025 23:09:35 +0900 Subject: [PATCH] =?UTF-8?q?[20251103]=20BOJ=20/=20G1=20/=20=EB=82=9C?= =?UTF-8?q?=EB=AF=BC=20/=20=EA=B9=80=EB=AF=BC=EC=A7=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../3 BOJ G1 \353\202\234\353\257\274.md" | 82 +++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 "zinnnn37/202511/3 BOJ G1 \353\202\234\353\257\274.md" diff --git "a/zinnnn37/202511/3 BOJ G1 \353\202\234\353\257\274.md" "b/zinnnn37/202511/3 BOJ G1 \353\202\234\353\257\274.md" new file mode 100644 index 00000000..82d9ef96 --- /dev/null +++ "b/zinnnn37/202511/3 BOJ G1 \353\202\234\353\257\274.md" @@ -0,0 +1,82 @@ +```java +import java.io.*; +import java.util.*; + +public class BJ_23090_난민 { + + private static final BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + private static final BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + private static final StringBuilder sb = new StringBuilder(); + private static StringTokenizer st; + + private static int N, x, y, prevY; + private static long totalDist; + private static Shelter newShelter; + private static Queue maxHeap = new PriorityQueue<>((a, b) -> Integer.compare(b.y, a.y)); + private static Queue minHeap = new PriorityQueue<>((a, b) -> Integer.compare(a.y, b.y)); + private static List shelters = new ArrayList<>(); + + private static class Shelter { + int x; + int y; + + Shelter(int x, int y) { + this.x = x; + this.y = y; + } + } + + public static void main(String[] args) throws IOException { + N = Integer.parseInt(br.readLine()); + + while (N-- > 0) { + init(); + sol(); + } + + bw.write(sb.toString()); + bw.flush(); + bw.close(); + br.close(); + } + + private static void init() throws IOException { + st = new StringTokenizer(br.readLine()); + x = Integer.parseInt(st.nextToken()); + y = Integer.parseInt(st.nextToken()); + + newShelter = new Shelter(x, y); + } + + private static void sol() { + if (maxHeap.isEmpty() || newShelter.y <= maxHeap.peek().y) { + maxHeap.add(newShelter); + } else { + minHeap.add(newShelter); + } + + if (maxHeap.size() > minHeap.size() + 1) { + minHeap.add(maxHeap.poll()); + } else if (minHeap.size() > maxHeap.size()) { + maxHeap.add(minHeap.poll()); + } + + int curY = maxHeap.peek().y; + + // 새로 생긴 대피소의 x, y값 더하기 + totalDist += Math.abs(newShelter.x); + totalDist += Math.abs(newShelter.y - curY); + + // 변화된 만큼만 계산 + int diff = curY - prevY; + int lowerCount = maxHeap.size() - 1; + int upperCount = minHeap.size(); + + totalDist += (long) (lowerCount - upperCount) * diff; + + prevY = curY; + + sb.append(curY).append(" ").append(totalDist).append("\n"); + } +} +``` \ No newline at end of file