From e49ad98946e1a12317655a964cb86b9b2b7e53e5 Mon Sep 17 00:00:00 2001 From: sksn12 Date: Wed, 3 Dec 2025 01:04:38 +0900 Subject: [PATCH] m --- ...\353\222\244\354\247\221\352\270\260.java" | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 "_youngman/\353\217\231\354\240\204\353\222\244\354\247\221\352\270\260.java" diff --git "a/_youngman/\353\217\231\354\240\204\353\222\244\354\247\221\352\270\260.java" "b/_youngman/\353\217\231\354\240\204\353\222\244\354\247\221\352\270\260.java" new file mode 100644 index 00000000..4681b950 --- /dev/null +++ "b/_youngman/\353\217\231\354\240\204\353\222\244\354\247\221\352\270\260.java" @@ -0,0 +1,52 @@ +import java.io.*; +import java.util.*; + +public class Main { + static int N; + static int[][] coin; // H=0, T=1 + + public static void main(String[] args) throws Exception { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + + N = Integer.parseInt(br.readLine()); + coin = new int[N][N]; + + for (int i = 0; i < N; i++) { + String line = br.readLine().replace(" ", ""); + for (int j = 0; j < N; j++) { + coin[i][j] = (line.charAt(j) == 'T') ? 1 : 0; + } + } + + int answer = Integer.MAX_VALUE; + + // 행 뒤집기 여부를 비트마스크로 표현 + for (int mask = 0; mask < (1 << N); mask++) { + int sum = 0; + + // 열 기준으로 T개 계산 + for (int col = 0; col < N; col++) { + int tCount = 0; + + for (int row = 0; row < N; row++) { + int val = coin[row][col]; + + // mask에서 row번째 비트가 1이면 행 뒤집기 발생 + if ((mask & (1 << row)) != 0) { + val ^= 1; // 0↔1 flip + } + + if (val == 1) tCount++; + } + + // 이 열에서 뒤집지 않고 T 개수 tCount + // 이 열을 뒤집으면 H<->T 이므로 T 개수는 N - tCount + sum += Math.min(tCount, N - tCount); + } + + answer = Math.min(answer, sum); + } + + System.out.println(answer); + } +}