목차
코드
#include <iostream>
using namespace std;
char case1[8][9] = {
"WBWBWBWB",
"BWBWBWBW",
"WBWBWBWB",
"BWBWBWBW",
"WBWBWBWB",
"BWBWBWBW",
"WBWBWBWB",
"BWBWBWBW",
};
char case2[8][9] = {
"BWBWBWBW",
"WBWBWBWB",
"BWBWBWBW",
"WBWBWBWB",
"BWBWBWBW",
"WBWBWBWB",
"BWBWBWBW",
"WBWBWBWB",
};
int main() {
char chess[50][50];
int n, m;
cin >> n >> m;
for(int i = 0; i < n; i++){
for(int j = 0; j < m; j++){
cin >> chess[i][j];
}
}
int min = 64;
int cnt_1 = 0;
int cnt_2 = 0;
for(int k = 0; k <= n - 8; k++){
for(int l = 0; l <= m - 8; l++){
cnt_1 = 0;
cnt_2 = 0;
for(int x = k; x < k + 8; x++){
for(int y = l; y < l + 8; y++){
if(chess[x][y] != case1[x - k][y - l]) cnt_1++;
if(chess[x][y] != case2[x - k][y - l]) cnt_2++;
}
}
if(cnt_1 < cnt_2) min = cnt_1 < min ? cnt_1 : min;
else min = cnt_2 < min ? cnt_2 : min;
}
}
cout << min;
}
사견
문제를 읽어보면, 체스판을 칠할 수 있는 경우의 수는 2가지이다.
첫번째가 'W' 인 경우
첫번째가 'B' 인 경우
따라서 이러한 경우 2 가지를 애초에 char[8][8] 배열로 만들어둔다.
이후 입력받은 보드에서
만들 수 있는 모든 8X8 보드의 경우의 수를 다 돌려보면서
위의 두 가지 case와 비교한다.
각 각의 case와 다른 칸이 있을때마다 카운트 한 후,
두 case 중 더 작은수를 찾은 후
여태까지의 찾은 경우의 작은수보다 작으면 교체한다.
'공부 > 백준' 카테고리의 다른 글
2750번: 수 정렬하기(백준 C++) (0) | 2020.10.27 |
---|---|
1436번: 영화감독 숌(백준 C++) (0) | 2020.10.26 |
7568번: 덩치(백준 C++) (0) | 2020.10.24 |
2231번: 분해합(백준 C++) (0) | 2020.10.23 |
2798번: 블랙잭(백준 C++) (0) | 2020.10.22 |