#include<iostream>
#include<algorithm>
using namespace std;
int chess[51][51];
/*
black = 0
white = 1
*/
int check(int x,int y)
{
int cnt1 = 0;
int cnt2 = 0;
for (int i = x; i < x + 8; i++) {
for (int j = y; j < y + 8; j++) {
if ((i + j) % 2 == chess[i][j]) cnt1++; //흰색
if ((i + j + 1) % 2 == chess[i][j]) cnt2++; //검정색
}
}
return min(cnt1, cnt2);
}
int main()
{
int N, M;
int mini = 2500;
char c;
cin >> N >> M;
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
cin >> c;
if (c == 'B') chess[i][j] = 0;
else chess[i][j] = 1;
}
}
for (int i = 0; i <= N-8; i++) {
for (int j = 0; j <= M-8; j++) {
if (mini > check(i, j)) mini = check(i, j);
}
}
cout << mini;
}
chessChange 설명
(row, col) 에서 시작하는 8 * 8 체스판 만드는 데 드는 최소 카운트를 리턴함.
B로 시작하는 체스판을 기준으로 계산한 후, W로 시작하는 체스판 만드는 바꾸는 칸 수는 64에서 앞의 카운트 빼서 계산!
행 변화값 + 열 변화값이 짝수면 시작색(B)과 동일해야 함 -> 동일하지 않다면 카운트
행 변화값 + 열 변화값이 홀수라면 시작색과 반대색(W) 이어야 함 -> W가 아니라면 카운트
이런식으로 작성하면 완료!