From a86e5354506cc3cb28a75149a02365709b1b9121 Mon Sep 17 00:00:00 2001 From: Ukj0ng <90972240+Ukj0ng@users.noreply.github.com> Date: Tue, 16 Dec 2025 12:38:56 +0900 Subject: [PATCH] =?UTF-8?q?[20251216]=20BOJ=20/=20G5=20/=20=EB=A9=80?= =?UTF-8?q?=ED=8B=B0=EB=B2=84=EC=8A=A4=20=E2=85=A1=20/=20=ED=95=9C?= =?UTF-8?q?=EC=A2=85=EC=9A=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...0\353\262\204\354\212\244 \342\205\241.md" | 87 +++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 "Ukj0ng/202512/16 BOJ G5 \353\251\200\355\213\260\353\262\204\354\212\244 \342\205\241.md" diff --git "a/Ukj0ng/202512/16 BOJ G5 \353\251\200\355\213\260\353\262\204\354\212\244 \342\205\241.md" "b/Ukj0ng/202512/16 BOJ G5 \353\251\200\355\213\260\353\262\204\354\212\244 \342\205\241.md" new file mode 100644 index 00000000..6436b6a6 --- /dev/null +++ "b/Ukj0ng/202512/16 BOJ G5 \353\251\200\355\213\260\353\262\204\354\212\244 \342\205\241.md" @@ -0,0 +1,87 @@ +``` +import java.io.*; +import java.util.*; + +public class Main { + private static final BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + private static final BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + private static int[][] arr, sortedArr, ranks; + private static int M, N, answer; + + public static void main(String[] args) throws IOException { + init(); + for (int i = 0; i < M-1; i++) { + for (int j = i+1; j < M; j++) { + boolean same = true; + for (int k = 0; k < N; k++) { + if (ranks[i][k] != ranks[j][k]) { + same = false; + break; + } + } + + if (same) answer++; + } + } + + bw.write(answer + "\n"); + bw.flush(); + bw.close(); + br.close(); + } + + private static void init() throws IOException { + StringTokenizer st = new StringTokenizer(br.readLine()); + + M = Integer.parseInt(st.nextToken()); + N = Integer.parseInt(st.nextToken()); + + arr = new int[M][N]; + ranks = new int[M][N]; + sortedArr = new int[M][]; + + for (int i = 0; i < M; i++) { + st = new StringTokenizer(br.readLine()); + Set set = new HashSet<>(); + for (int j = 0; j < N; j++) { + arr[i][j] = Integer.parseInt(st.nextToken()); + set.add(arr[i][j]); + } + + sortedArr[i] = new int[set.size()]; + int index = 0; + for (Integer e : set) { + sortedArr[i][index++] = e; + } + Arrays.sort(sortedArr[i]); + } + + for (int i = 0; i < M; i++) { + for (int j = 0; j < N; j++) { + ranks[i][j] = binarySearch(i, arr[i][j]); + } + } + } + + private static int binarySearch(int index, int val) { + int left = 0; + int right = sortedArr[index].length-1; + int result = -1; + + while (left <= right) { + int mid = left + (right - left) / 2; + + if (val == sortedArr[index][mid]) { + result = mid; + break; + } else if (val > sortedArr[index][mid]) { + left = mid+1; + } else { + right = mid-1; + } + } + + return result; + } +} +```