🔗문제 풀러가기
단계별로 풀어보기 단계 12의 4번째 문제이다.
B로 시작하는 체스판과 W로 시작하는 체스판 2개를 배열로 미리 선언한 뒤 브루트포스 알고리즘을 이용하여 비교하는 방식으로 문제를 해결하였다.
#include <iostream>
using namespace std;
char arr[51][51];
char whiteArr[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 black_Arr[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 White(int x, int y)
{
int cnt = 0;
for (int i = 0; i < 8; i++)
{
for (int j = 0; j < 8; j++)
{
if (arr[x + i][y + j] != whiteArr[i][j])
cnt++;
}
}
return cnt;
}
int Black(int x, int y)
{
int cnt = 0;
for (int i = 0; i < 8; i++)
{
for (int j = 0; j < 8; j++)
{
if (arr[x + i][y + j] != black_Arr[i][j])
cnt++;
}
}
return cnt;
}
int main()
{
int n, m;
int cnt = 51;
cin >> n >> m;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
cin >> arr[i][j];
}
}
int white, black;
for (int i = 0; i <= n - 8; i++)
{
for (int j = 0; j <= m - 8; j++)
{
int curCnt;
white = White(i, j);
black = Black(i, j);
curCnt = white < black ? white : black;
cnt = curCnt < cnt ? curCnt : cnt;
}
}
std::cout << cnt;
}