백준/브루트포스
1018번: 체스판 다시 칠하기 [C++]
Koalitsiya
2023. 3. 27. 17:20
문제
풀이
주어진 배열을 미리 선언한 두 배열과 비교하여 다시 칠해야할 정사각형의 개수 두 가지 중 작은 값을 출력하면된다.
#include <iostream>
#include <string>
#include <vector>
using namespace std;
string boardWB[8] = { "WBWBWBWB",
"BWBWBWBW",
"WBWBWBWB",
"BWBWBWBW",
"WBWBWBWB",
"BWBWBWBW",
"WBWBWBWB",
"BWBWBWBW" };
string boardBW[8] = { "BWBWBWBW",
"WBWBWBWB",
"BWBWBWBW",
"WBWBWBWB",
"BWBWBWBW",
"WBWBWBWB",
"BWBWBWBW",
"WBWBWBWB" };
vector<string> board;
pair<int, int> func(int x, int y) {
int cntWB = 0, cntBW = 0;
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
if (board[i + x][j + y] != boardWB[i][j])
cntWB++;
}
}
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
if (board[i + x][j + y] != boardBW[i][j])
cntBW++;
}
}
return { cntWB, cntBW };
}
int main() {
int n, m;
int min = 99999;
string str;
cin >> n >> m;
for (int i = 0; i < n; i++) {
cin >> str;
board.push_back(str);
}
for (int i = 0; i + 8 <= n; i++) {
for (int j = 0; j + 8 <= m; j++) {
pair<int, int> cnt;
int tmp = 0;
cnt = func(i, j);
if (cnt.first > cnt.second) tmp = cnt.second;
else tmp = cnt.first;
if (min > tmp) min = tmp;
}
}
cout << min;
return 0;
}