응애개발자
article thumbnail
728x90

문제

 

1018번: 체스판 다시 칠하기

첫째 줄에 N과 M이 주어진다. N과 M은 8보다 크거나 같고, 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 보드의 각 행의 상태가 주어진다. B는 검은색이며, W는 흰색이다.

www.acmicpc.net


코드

 

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
    private static StringBuilder sb;
    private static BufferedReader br;
    private static StringTokenizer st;
    private static int N,M;
    private static boolean[][] arr;
    private static int answer = Integer.MAX_VALUE;

    //입력
    public static void input() throws Exception {
        br = new BufferedReader(new InputStreamReader(System.in));
        sb = new StringBuilder();
        st = new StringTokenizer(br.readLine());

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

        arr = new boolean[N][M];
        for(int i = 0 ; i < N ; i++){
            String line = br.readLine();
            for(int j = 0 ; j < M ; j++){
                if(line.charAt(j) == 'W'){
                    arr[i][j] = true;
                }else{
                    arr[i][j] = false;
                }
            }
        }
    }
    
    //다시 칠해야 하는 정사각형 찾기
    public static void find(int x, int y){
        boolean check = arr[x][y];

        int cnt = 0;

        for(int i = x ; i < x+8 ; i++){
            for(int j = y ; j < y+8 ; j++){
                if(arr[i][j] != check){
                    cnt++;
                }
                check = (!check);
            }
            check = (!check);
        }
        cnt = Math.min(cnt,64-cnt);
        answer = Math.min(answer,cnt);
    }

    //과정
    public static void process() {
        for(int i = 0 ; i < N-7 ; i++){
            for(int j = 0 ; j < M-7 ; j++){
                find(i,j);
            }
        }
        System.out.println(answer);
    }


    public static void main(String[] args) throws Exception {
        input();
        process();
    }
}
profile

응애개발자

@Eungae-D

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!