Skip to content

Commit 312ea2f

Browse files
authored
Merge pull request #1541 from AlgorithmWithGod/Ukj0ng
[20251129] BOJ / G3 / 합이 0인 네 정수
2 parents 947532e + 8d34c8e commit 312ea2f

File tree

1 file changed

+96
-0
lines changed

1 file changed

+96
-0
lines changed
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
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 int[] A, B, C, D, AB, CD;
9+
private static int n;
10+
private static long answer;
11+
12+
public static void main(String[] args) throws IOException {
13+
init();
14+
for (int i = 0; i < n*n; i++) {
15+
int min = binarySearch1(AB[i]);
16+
int max = binarySearch2(AB[i]);
17+
18+
if (min == -1) continue;
19+
answer += max-min+1;
20+
}
21+
22+
bw.write(answer + "\n");
23+
bw.flush();
24+
bw.close();
25+
br.close();
26+
}
27+
28+
private static void init() throws IOException {
29+
n = Integer.parseInt(br.readLine());
30+
31+
A = new int[n];
32+
B = new int[n];
33+
C = new int[n];
34+
D = new int[n];
35+
AB = new int[n*n];
36+
CD = new int[n*n];
37+
38+
for (int i = 0; i < n; i++) {
39+
StringTokenizer st = new StringTokenizer(br.readLine());
40+
A[i] = Integer.parseInt(st.nextToken());
41+
B[i] = Integer.parseInt(st.nextToken());
42+
C[i] = Integer.parseInt(st.nextToken());
43+
D[i] = Integer.parseInt(st.nextToken());
44+
}
45+
46+
int index = 0;
47+
for (int i = 0; i < n; i++) {
48+
for (int j = 0; j < n; j++) {
49+
AB[index] = A[i]+B[j];
50+
CD[index++] = C[i]+D[j];
51+
}
52+
}
53+
54+
Arrays.sort(AB);
55+
Arrays.sort(CD);
56+
}
57+
58+
private static int binarySearch1(int num) {
59+
int left = 0;
60+
int right = n*n-1;
61+
int result = -1;
62+
63+
while (left <= right) {
64+
int mid = left + (right-left)/2;
65+
66+
if (CD[mid] + num == 0) {
67+
result = mid;
68+
right = mid-1;
69+
}
70+
else if (CD[mid] + num > 0) right = mid-1;
71+
else left = mid+1;
72+
}
73+
74+
return result;
75+
}
76+
77+
private static int binarySearch2(int num) {
78+
int left = 0;
79+
int right = n*n-1;
80+
int result = -1;
81+
82+
while (left <= right) {
83+
int mid = left + (right-left)/2;
84+
85+
if (CD[mid] + num == 0) {
86+
result = mid;
87+
left = mid+1;
88+
}
89+
else if (CD[mid] + num > 0) right = mid-1;
90+
else left = mid+1;
91+
}
92+
93+
return result;
94+
}
95+
}
96+
```

0 commit comments

Comments
 (0)