diff --git "a/zinnnn37/202509/20 BOJ G4 \354\262\264\354\212\244\355\214\220 \353\213\244\354\213\234 \354\271\240\355\225\230\352\270\260 2.md" "b/zinnnn37/202509/20 BOJ G4 \354\262\264\354\212\244\355\214\220 \353\213\244\354\213\234 \354\271\240\355\225\230\352\270\260 2.md" new file mode 100644 index 00000000..9184e536 --- /dev/null +++ "b/zinnnn37/202509/20 BOJ G4 \354\262\264\354\212\244\355\214\220 \353\213\244\354\213\234 \354\271\240\355\225\230\352\270\260 2.md" @@ -0,0 +1,77 @@ +```java +import java.io.*; +import java.util.StringTokenizer; + +public class BJ_25682_체스판_다시_칠하기_2 { + + private static final boolean BLACK = true; + private static final boolean WHITE = false; + + private static final BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + private static final BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + private static StringTokenizer st; + + private static int N, M, K; + + private static boolean[][] board; + private static int[][] prefix; + + public static void main(String[] args) throws IOException { + init(); + sol(); + } + + private static void init() throws IOException { + st = new StringTokenizer(br.readLine()); + N = Integer.parseInt(st.nextToken()); + M = Integer.parseInt(st.nextToken()); + K = Integer.parseInt(st.nextToken()); + + board = new boolean[N + 1][M + 1]; + prefix = new int[N + 1][M + 1]; + + for (int i = 1; i <= N; i++) { + String s = br.readLine(); + for (int j = 1; j <= M; j++) { + board[i][j] = s.charAt(j - 1) == 'B' ? BLACK : WHITE; + } + } + } + + private static void sol() throws IOException { + bw.write(Math.min(setPrefix(BLACK), setPrefix(WHITE)) + "\n"); + bw.flush(); + bw.close(); + br.close(); + } + + // 열 + 행이 짝수일 때 color라고 가정 + private static int setPrefix(boolean color) { + int val; + + for (int i = 1; i <= N; i++) { + for (int j = 1; j <= M; j++) { + if ((i + j) % 2 == 0) { + val = board[i][j] != color ? 1 : 0; + } else { + val = board[i][j] == color ? 1 : 0; + } + prefix[i][j] = prefix[i][j - 1] + prefix[i - 1][j] - prefix[i - 1][j - 1] + val; + } + } + return getMinPrefix(); + } + + private static int getMinPrefix() { + int cnt = Integer.MAX_VALUE; + + for (int i = K; i <= N; i++) { + for (int j = K; j <= M; j++) { + cnt = Math.min(cnt, prefix[i][j] - prefix[i - K][j] - prefix[i][j - K] + prefix[i - K][j - K]); + } + } + return cnt; + } + +} +``` \ No newline at end of file diff --git "a/zinnnn37/202509/21 BOJ G5 \354\225\240\353\204\210\352\267\270\353\236\250.md" "b/zinnnn37/202509/21 BOJ G5 \354\225\240\353\204\210\352\267\270\353\236\250.md" new file mode 100644 index 00000000..9f21f392 --- /dev/null +++ "b/zinnnn37/202509/21 BOJ G5 \354\225\240\353\204\210\352\267\270\353\236\250.md" @@ -0,0 +1,55 @@ +```java +import java.io.*; + +public class BJ_6443_애너그램 { + + private static final BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + private static final BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + + private static String input; + private static int length; + private static int[] alphabets; + private static char[] result; + + public static void main(String[] args) throws IOException { + int T = Integer.parseInt(br.readLine()); + + while (T-- > 0) { + sol(); + } + bw.flush(); + bw.close(); + br.close(); + } + + private static void sol() throws IOException { + input = br.readLine(); + length = input.length(); + alphabets = new int[26]; + result = new char[length]; + + for (int i = 0; i < length; i++) { + alphabets[input.charAt(i) - 'a']++; + } + + perm(0); + } + + private static void perm(int depth) throws IOException { + if (depth == length) { + bw.write(result); + bw.write('\n'); + return; + } + + for (int i = 0; i < 26; i++) { + if (alphabets[i] > 0) { + alphabets[i]--; + result[depth] = (char) (i + 'a'); + perm(depth + 1); + alphabets[i]++; + } + } + } +} +``` \ No newline at end of file