본문 바로가기
CodingTest/백준

[JAVA] 백준 - 1018번: 체스판 다시 칠하기 | 브루트포스 알고리즘

by Daybreak21 2023. 10. 3.

1018번: 체스판 다시 칠하기 (acmicpc.net)

 

1018번: 체스판 다시 칠하기

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

www.acmicpc.net

 

import java.util.*;
import static java.lang.Math.min;

public class Main {
    public static void main(String[] args) {
       Scanner input = new Scanner(System.in);
       int n = input.nextInt();
       int m = input.nextInt();

       boolean[][] brd = new boolean[n][m];
       for (int i=0; i<n; i++) {
           String str = input.next();
           for (int j=0; j<m; j++) {
               if (str.charAt(j) == 'W') brd[i][j] = true;
               else brd[i][j] = false;
           }
       }

        int ans = 64;
        for (int i = 0; i<=n-8; i++) {
           for (int j = 0; j<=m-8; j++){

               int cnt = 0;
               boolean TF = brd[i][j];
               for (int i8 = i; i8 < i+8; i8++){
                   for (int j8 = j; j8 < j+8; j8++){
                        if (TF != brd[i8][j8]) cnt++;
                        TF = !TF;
                   }
                   TF = !TF;
               }
               ans = min(ans, cnt = min(cnt, 64-cnt));
           }

       }
        System.out.println(ans);
    }
}