시작이 W인 경우의 체스판, 시작이 B인 경우의 체스판을 각각 미리 입력해놓기
입력받은 배열을 8X8로 잘라서 1번에서 만들어놓은 두 체스판들과 비교
색이 다를때마다 count를 해서 가장 작은 경우 출력
정답 코드
#include <iostream>
using namespace std;
int N, M;
string in[51], cand[51];
int ans=2500;
int intoBW(string bw[8], string in[50]) {
int count=0;
for(int i=0; i<8; i++) {
for(int j=0; j<8; j++) {
if(bw[i][j] != in[i][j]) {
count++;
}
}
}
return count;
}
int intoWB(string wb[8], string in[50]) {
int count=0;
for(int i=0; i<8; i++) {
for(int j=0; j<8; j++) {
if(wb[i][j] != in[i][j]) {
count++;
}
}
}
return count;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
string bw[8] = {
"BWBWBWBWBW",
"WBWBWBWBWB",
"BWBWBWBWBW",
"WBWBWBWBWB",
"BWBWBWBWBW",
"WBWBWBWBWB",
"BWBWBWBWBW",
"WBWBWBWBWB"
};
string wb[8] = {
"WBWBWBWBWB",
"BWBWBWBWBW",
"WBWBWBWBWB",
"BWBWBWBWBW",
"WBWBWBWBWB",
"BWBWBWBWBW",
"WBWBWBWBWB",
"BWBWBWBWBW"
};
cin>>N>>M;
for(int i=0; i<=N; i++) {
getline(cin, in[i]);
}
for(int i=0; i<=N-8; i++) {
for(int j=0; j<=M-8; j++) {
for(int k=0; k<8; k++) {
cand[k] = in[i+k+1].substr(j, j+8);
}
int a=intoBW(bw, cand);
int b=intoWB(wb, cand);
if(min(a, b) < ans) {
ans = min(a, b);
}
}
}
cout<<ans<<"\n";
return 0;
}