- 난이도: 실버 5
- 알고리즘: 브루트포스 알고리즘
크기의 네모판으로 모든 체스판을 잘라내서, 지그재그로 'W'와 'B'의 개수를 센 다음 이 값들 중 최솟값을 고르면 된다.
지그재그로 개수를 세는 함수는 checkNum() 함수로 다음과 같다.
int checkNum(char arr[][8]) {
int count = 0;
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
if ((i + j) % 2 == 0) {
if (arr[i][j] != 'W') count++;
}
else {
if (arr[i][j] != 'B') count++;
}
}
}
return count;
}
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
int checkNum(char arr[][8]) {
int count = 0;
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
if ((i + j) % 2 == 0) {
if (arr[i][j] != 'W') count++;
}
else {
if (arr[i][j] != 'B') count++;
}
}
}
return count;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int m, n;
cin >> n >> m;
char c;
char** arr = new char* [n];
for (int i = 0; i < n; i++) {
arr[i] = new char[m];
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cin >> c;
arr[i][j] = c;
}
}
int min = 64;
int max = 0;
for (int i = 0; i < n-7; i++) {
for (int j = 0; j < m-7; j++) {
char temp[8][8];
for (int a = 0; a < 8; a++) {
for (int b = 0; b < 8; b++) {
temp[a][b] = arr[a + i][b + j];
}
}
int num = checkNum(temp);
min = min < num ? min : num;
max = max > num ? max : num;
}
}
cout <<( min > 64 - max ? 64 - max : min);
for (int i = 0; i < n; i++) {
delete[] arr[i];
}
delete[] arr;
}