Skip to content

Commit 44384ae

Browse files
authored
Merge pull request #1685 from AlgorithmWithGod/Ukj0ng
[20251216] BOJ / G5 / 멀티버스 Ⅱ / 한종욱
2 parents b99fd1d + a86e535 commit 44384ae

File tree

1 file changed

+87
-0
lines changed

1 file changed

+87
-0
lines changed
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
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[][] arr, sortedArr, ranks;
9+
private static int M, N, answer;
10+
11+
public static void main(String[] args) throws IOException {
12+
init();
13+
for (int i = 0; i < M-1; i++) {
14+
for (int j = i+1; j < M; j++) {
15+
boolean same = true;
16+
for (int k = 0; k < N; k++) {
17+
if (ranks[i][k] != ranks[j][k]) {
18+
same = false;
19+
break;
20+
}
21+
}
22+
23+
if (same) answer++;
24+
}
25+
}
26+
27+
bw.write(answer + "\n");
28+
bw.flush();
29+
bw.close();
30+
br.close();
31+
}
32+
33+
private static void init() throws IOException {
34+
StringTokenizer st = new StringTokenizer(br.readLine());
35+
36+
M = Integer.parseInt(st.nextToken());
37+
N = Integer.parseInt(st.nextToken());
38+
39+
arr = new int[M][N];
40+
ranks = new int[M][N];
41+
sortedArr = new int[M][];
42+
43+
for (int i = 0; i < M; i++) {
44+
st = new StringTokenizer(br.readLine());
45+
Set<Integer> set = new HashSet<>();
46+
for (int j = 0; j < N; j++) {
47+
arr[i][j] = Integer.parseInt(st.nextToken());
48+
set.add(arr[i][j]);
49+
}
50+
51+
sortedArr[i] = new int[set.size()];
52+
int index = 0;
53+
for (Integer e : set) {
54+
sortedArr[i][index++] = e;
55+
}
56+
Arrays.sort(sortedArr[i]);
57+
}
58+
59+
for (int i = 0; i < M; i++) {
60+
for (int j = 0; j < N; j++) {
61+
ranks[i][j] = binarySearch(i, arr[i][j]);
62+
}
63+
}
64+
}
65+
66+
private static int binarySearch(int index, int val) {
67+
int left = 0;
68+
int right = sortedArr[index].length-1;
69+
int result = -1;
70+
71+
while (left <= right) {
72+
int mid = left + (right - left) / 2;
73+
74+
if (val == sortedArr[index][mid]) {
75+
result = mid;
76+
break;
77+
} else if (val > sortedArr[index][mid]) {
78+
left = mid+1;
79+
} else {
80+
right = mid-1;
81+
}
82+
}
83+
84+
return result;
85+
}
86+
}
87+
```

0 commit comments

Comments
 (0)