체스판 다시 칠하기2


title: 2026-02-18 author: 강병호 (이름) date: 2026-02-18 (날짜) category: TIL/강병호/2026/02 (파일 경로 : TIL/{이름}/{연}/{월}) layout: post (자유) —

import java.io.*;
import java.util.*;

public class Q25682 {

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        int N = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());
        int K = Integer.parseInt(st.nextToken());

        char[][] arr = new char[N][M];
        int[][] psum = new int[N+1][M+1];

        for (int i = 0; i < N; i++) {
            st = new StringTokenizer(br.readLine());
            String s = st.nextToken();
            arr[i] = s.toCharArray();
        }

        // B 시작을 기준으로 작성
        for (int i = 0; i < N; i++) {
            for (int j = 0; j < M; j++) {
                // 1. 현재 칸의 정상 유무 확인
                boolean isBlack = ((i + j) % 2 == 0);

                int value = 0;
                // 예산한 색과 다르면 1

                if (isBlack && arr[i][j] == 'W') value=1;

                if (!isBlack && arr[i][j] == 'B') value = 1;

                psum[i+1][j+1] = psum[i][j+1] + psum[i+1][j] - psum[i][j] + value;

            }
        }
        int count = Integer.MAX_VALUE;
        for (int i = 1; i <= N - K + 1; i++) {
            for (int j = 1; j <= M - K + 1; j++) {
                int cnt = psum[i+K-1][j+K-1] - psum[i-1][j+K-1]
                        - psum[i+K-1][j-1] + psum[i-1][j-1];
                count = Math.min(count, Math.min(cnt, K * K - cnt));
            }
        }

        System.out.println(count);
    }
}



results matching ""

    No results matching ""