Skip to content

Commit 44e8cd7

Browse files
authored
[20250826] BOJ / G1 / 난민 / 한종욱
1 parent 7f74d9f commit 44e8cd7

File tree

1 file changed

+66
-0
lines changed

1 file changed

+66
-0
lines changed

Ukj0ng/202508/26 BOJ G1 난민.md

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
```
2+
import java.io.*;
3+
import java.util.*;
4+
5+
public class Main {
6+
private static final BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
7+
private static final BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
8+
private static PriorityQueue<int[]> upperQueue;
9+
private static PriorityQueue<int[]> lowerQueue;
10+
private static int N, median;
11+
private static long sum;
12+
public static void main(String[] args) throws IOException {
13+
init();
14+
15+
bw.flush();
16+
bw.close();
17+
br.close();
18+
}
19+
20+
private static void init() throws IOException {
21+
N = Integer.parseInt(br.readLine());
22+
long upperVal = 0;
23+
long lowerVal = 0;
24+
median = 0;
25+
sum = 0;
26+
long xSum = 0;
27+
28+
upperQueue = new PriorityQueue<>((o1, o2) -> Integer.compare(o1[1], o2[1]));
29+
lowerQueue = new PriorityQueue<>((o1, o2) -> Integer.compare(o2[1], o1[1]));
30+
31+
for (int i = 0; i < N; i++) {
32+
StringTokenizer st = new StringTokenizer(br.readLine());
33+
int x = Integer.parseInt(st.nextToken());
34+
int y = Integer.parseInt(st.nextToken());
35+
36+
lowerQueue.add(new int[]{x, y});
37+
lowerVal += y;
38+
xSum += Math.abs(x);
39+
40+
if (upperQueue.size() + 1 == lowerQueue.size()) {
41+
if (!upperQueue.isEmpty() && upperQueue.peek()[1] < lowerQueue.peek()[1]) {
42+
upperVal += (lowerQueue.peek()[1] - upperQueue.peek()[1]);
43+
lowerVal += (upperQueue.peek()[1] - lowerQueue.peek()[1]);
44+
swap();
45+
}
46+
} else if (upperQueue.size() + 2 == lowerQueue.size()) {
47+
upperVal += lowerQueue.peek()[1];
48+
lowerVal -= lowerQueue.peek()[1];
49+
upperQueue.add(lowerQueue.poll());
50+
}
51+
52+
median = lowerQueue.peek()[1];
53+
long ySum = ((long)median * lowerQueue.size() - lowerVal + upperVal - (long)median * upperQueue.size());
54+
long totalSum = xSum + ySum;
55+
bw.write(median + " " + totalSum + "\n");
56+
}
57+
}
58+
59+
private static void swap() {
60+
int[] temp = lowerQueue.poll();
61+
lowerQueue.add(upperQueue.poll());
62+
upperQueue.add(temp);
63+
}
64+
}
65+
66+
```

0 commit comments

Comments
 (0)