https://www.acmicpc.net/problem/1018
<코드>
#include <iostream>
#include <string>
#include <cstring>
#include <algorithm>
using namespace std;
int M, N;
char board[51][51];
char wb[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 bw[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_first(int x, int y) {
int result = 0;
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
if (board[x + i][y + j] != wb[i][j])
result++;
}
}
return result;
}
int black_first(int x, int y) {
int result = 0;
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
if (board[x + i][y + j] != bw[i][j])
result++;
}
}
return result;
}
int main()
{
cin>>N>>M;
for(int i=0;i<N;i++)
{
for(int j=0;j<M;j++)
{
cin>>board[i][j];
}
}
int minresult = 123456789;
for(int i = 0; i + 8 <= N; i++)
{
for(int j = 0; j + 8 <= M; j++)
{
int res;
res = min(white_first(i,j),black_first(i,j));
if(res < minresult) {
minresult = res;
}
}
}
cout<<minresult<<'\n';
}
모든 경우의 수를 조사하는 브루트포스 알고리즘 문제이다. 우선적으로 wb, bw 배열은 흰색이 먼저오는것과 검은색이 먼저오는것의 배열을 미리 8*8로 만들어주었다. 흰색이 먼저인 경우와 검은색이 먼저인 경우를 비교해 값이 더 작은 것을 매 검사마다 갱신해줘야 한다.
<코드 참조>
https://codesyun.tistory.com/83
'PS > 브루트포스 알고리즘[Bruteforce]' 카테고리의 다른 글
백준 2503 숫자 야구(c++) (0) | 2022.10.19 |
---|---|
백준 1526 가장 큰 금민수(c++) (0) | 2022.10.19 |
백준 2303 숫자 게임(c++) (0) | 2022.10.15 |
백준 2003 수들의 합2(c++) (0) | 2022.10.14 |
백준 2851 슈퍼 마리오(c++) (1) | 2022.10.12 |