diff --git "a/Seol-JY/202507/25 G4 \354\235\264\354\260\250\354\233\220 \353\260\260\354\227\264\352\263\274 \354\227\260\354\202\260.md" "b/Seol-JY/202507/25 G4 \354\235\264\354\260\250\354\233\220 \353\260\260\354\227\264\352\263\274 \354\227\260\354\202\260.md" new file mode 100644 index 00000000..e5e97e51 --- /dev/null +++ "b/Seol-JY/202507/25 G4 \354\235\264\354\260\250\354\233\220 \353\260\260\354\227\264\352\263\274 \354\227\260\354\202\260.md" @@ -0,0 +1,124 @@ +```java +import java.io.*; +import java.util.*; + +public class Main { + static int r, c, k; + static int[][] arr; + static int rowSize = 3, colSize = 3; + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + StringTokenizer st = new StringTokenizer(br.readLine()); + + r = Integer.parseInt(st.nextToken()) - 1; + c = Integer.parseInt(st.nextToken()) - 1; + k = Integer.parseInt(st.nextToken()); + + arr = new int[100][100]; + + for (int i = 0; i < 3; i++) { + st = new StringTokenizer(br.readLine()); + for (int j = 0; j < 3; j++) { + arr[i][j] = Integer.parseInt(st.nextToken()); + } + } + + int time = 0; + + while (time <= 100) { + if (r < rowSize && c < colSize && arr[r][c] == k) { + System.out.println(time); + return; + } + + if (time == 100) break; + + if (rowSize >= colSize) { + performROperation(); + } else { + performCOperation(); + } + + time++; + } + + System.out.println(-1); + } + + static void performROperation() { + int maxColSize = 0; + + for (int i = 0; i < rowSize; i++) { + Map countMap = new HashMap<>(); + for (int j = 0; j < colSize; j++) { + if (arr[i][j] != 0) { + countMap.put(arr[i][j], countMap.getOrDefault(arr[i][j], 0) + 1); + } + } + + List pairs = new ArrayList<>(); + for (Map.Entry entry : countMap.entrySet()) { + pairs.add(new int[]{entry.getKey(), entry.getValue()}); + } + + pairs.sort((a, b) -> { + if (a[1] != b[1]) return a[1] - b[1]; + return a[0] - b[0]; + }); + + Arrays.fill(arr[i], 0); + int idx = 0; + for (int[] pair : pairs) { + if (idx >= 100) break; + arr[i][idx++] = pair[0]; + if (idx >= 100) break; + arr[i][idx++] = pair[1]; + } + + maxColSize = Math.max(maxColSize, idx); + } + + colSize = maxColSize; + } + + static void performCOperation() { + int maxRowSize = 0; + + for (int j = 0; j < colSize; j++) { + Map countMap = new HashMap<>(); + for (int i = 0; i < rowSize; i++) { + if (arr[i][j] != 0) { + countMap.put(arr[i][j], countMap.getOrDefault(arr[i][j], 0) + 1); + } + } + + List pairs = new ArrayList<>(); + for (Map.Entry entry : countMap.entrySet()) { + pairs.add(new int[]{entry.getKey(), entry.getValue()}); + } + + pairs.sort((a, b) -> { + if (a[1] != b[1]) return a[1] - b[1]; + return a[0] - b[0]; + }); + + for (int i = 0; i < rowSize; i++) { + arr[i][j] = 0; + } + + int idx = 0; + for (int[] pair : pairs) { + if (idx >= 100) break; + arr[idx++][j] = pair[0]; + if (idx >= 100) break; + arr[idx++][j] = pair[1]; + } + + maxRowSize = Math.max(maxRowSize, idx); + } + + rowSize = maxRowSize; + } +} +```