Skip to content

Commit cb4748b

Browse files
authored
[20250725] BOJ / G4 / 이차원 배열과 연산 / 설진영
1 parent c3a51c6 commit cb4748b

File tree

1 file changed

+124
-0
lines changed

1 file changed

+124
-0
lines changed
Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
```java
2+
import java.io.*;
3+
import java.util.*;
4+
5+
public class Main {
6+
static int r, c, k;
7+
static int[][] arr;
8+
static int rowSize = 3, colSize = 3;
9+
10+
public static void main(String[] args) throws IOException {
11+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
12+
StringTokenizer st = new StringTokenizer(br.readLine());
13+
14+
r = Integer.parseInt(st.nextToken()) - 1;
15+
c = Integer.parseInt(st.nextToken()) - 1;
16+
k = Integer.parseInt(st.nextToken());
17+
18+
arr = new int[100][100];
19+
20+
for (int i = 0; i < 3; i++) {
21+
st = new StringTokenizer(br.readLine());
22+
for (int j = 0; j < 3; j++) {
23+
arr[i][j] = Integer.parseInt(st.nextToken());
24+
}
25+
}
26+
27+
int time = 0;
28+
29+
while (time <= 100) {
30+
if (r < rowSize && c < colSize && arr[r][c] == k) {
31+
System.out.println(time);
32+
return;
33+
}
34+
35+
if (time == 100) break;
36+
37+
if (rowSize >= colSize) {
38+
performROperation();
39+
} else {
40+
performCOperation();
41+
}
42+
43+
time++;
44+
}
45+
46+
System.out.println(-1);
47+
}
48+
49+
static void performROperation() {
50+
int maxColSize = 0;
51+
52+
for (int i = 0; i < rowSize; i++) {
53+
Map<Integer, Integer> countMap = new HashMap<>();
54+
for (int j = 0; j < colSize; j++) {
55+
if (arr[i][j] != 0) {
56+
countMap.put(arr[i][j], countMap.getOrDefault(arr[i][j], 0) + 1);
57+
}
58+
}
59+
60+
List<int[]> pairs = new ArrayList<>();
61+
for (Map.Entry<Integer, Integer> entry : countMap.entrySet()) {
62+
pairs.add(new int[]{entry.getKey(), entry.getValue()});
63+
}
64+
65+
pairs.sort((a, b) -> {
66+
if (a[1] != b[1]) return a[1] - b[1];
67+
return a[0] - b[0];
68+
});
69+
70+
Arrays.fill(arr[i], 0);
71+
int idx = 0;
72+
for (int[] pair : pairs) {
73+
if (idx >= 100) break;
74+
arr[i][idx++] = pair[0];
75+
if (idx >= 100) break;
76+
arr[i][idx++] = pair[1];
77+
}
78+
79+
maxColSize = Math.max(maxColSize, idx);
80+
}
81+
82+
colSize = maxColSize;
83+
}
84+
85+
static void performCOperation() {
86+
int maxRowSize = 0;
87+
88+
for (int j = 0; j < colSize; j++) {
89+
Map<Integer, Integer> countMap = new HashMap<>();
90+
for (int i = 0; i < rowSize; i++) {
91+
if (arr[i][j] != 0) {
92+
countMap.put(arr[i][j], countMap.getOrDefault(arr[i][j], 0) + 1);
93+
}
94+
}
95+
96+
List<int[]> pairs = new ArrayList<>();
97+
for (Map.Entry<Integer, Integer> entry : countMap.entrySet()) {
98+
pairs.add(new int[]{entry.getKey(), entry.getValue()});
99+
}
100+
101+
pairs.sort((a, b) -> {
102+
if (a[1] != b[1]) return a[1] - b[1];
103+
return a[0] - b[0];
104+
});
105+
106+
for (int i = 0; i < rowSize; i++) {
107+
arr[i][j] = 0;
108+
}
109+
110+
int idx = 0;
111+
for (int[] pair : pairs) {
112+
if (idx >= 100) break;
113+
arr[idx++][j] = pair[0];
114+
if (idx >= 100) break;
115+
arr[idx++][j] = pair[1];
116+
}
117+
118+
maxRowSize = Math.max(maxRowSize, idx);
119+
}
120+
121+
rowSize = maxRowSize;
122+
}
123+
}
124+
```

0 commit comments

Comments
 (0)