이 문제는 해결을 위해 8x8 크기의 체스판을 전역 번수로 미리 정의해 두었다.
check 함수를 통해 2개의 정답 체스판에 해당하는지 확인한다.
이때 최소로 칠하는 케이스를 값으로 반환하여 main 함수로 보내고 최소 값으로 출력한다.
#include<iostream>
using namespace std;
char board[51][51];
char ans_white[8][8] = {
{'W','B','W','B','W','B','W','B'},
{'B','W','B','W','B','W','B','W'},
{'W','B','W','B','W','B','W','B'},
{'B','W','B','W','B','W','B','W'},
{'W','B','W','B','W','B','W','B'},
{'B','W','B','W','B','W','B','W'},
{'W','B','W','B','W','B','W','B'},
{'B','W','B','W','B','W','B','W'}
};
char ans_black[8][8] = {
{'B','W','B','W','B','W','B','W'},
{'W','B','W','B','W','B','W','B'},
{'B','W','B','W','B','W','B','W'},
{'W','B','W','B','W','B','W','B'},
{'B','W','B','W','B','W','B','W'},
{'W','B','W','B','W','B','W','B'},
{'B','W','B','W','B','W','B','W'},
{'W','B','W','B','W','B','W','B'},
};
int check(int a, int b) { //check함수는 바꿔야하는 개수 반환
int count1 = 0;
int count2 = 0;
for (int i = a; i < a + 8; i++) {
for (int j = b; j < b + 8; j++) {
if (board[i][j] != ans_white[i-a][j-b])
count1++;
}
}
for (int i = a; i < a + 8; i++) {
for (int j = b; j < b + 8; j++) {
if (board[i][j] != ans_black[i-a][j-b])
count2++;
}
}
if (count1 > count2)return count2;
else return count1;
}
int main() {
int N, M;
int min = 987654321;
cin >> N >> M;
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
cin >> board[i][j];
}
}
//i, j는 시작 인덱스
for (int i = 0; i < N - 7; i++) {
for (int j = 0; j < M - 7; j++) {
if (min > check(i, j)) {
min = check(i, j);
}
}
}
cout << min << endl;
return 0;
}
'Baekjoon Review' 카테고리의 다른 글
[Silver 5] 1436번 영화감독 숌 (0) | 2023.10.04 |
---|---|
[Silver 5] 1181번 단어 정렬 (0) | 2023.10.03 |
[Bronze 1] 1546번 평균 (2) | 2023.10.02 |
[Bronze 1] 1157번 단어 공부 (0) | 2023.10.02 |
[Bronze 1] 1259번 팰린드롬수 (0) | 2023.10.02 |