https://www.acmicpc.net/problem/1018
문제 풀이
브루트포스 문제임을 알아도 어떤식으로 해결해야할지 막막했다.
다른 블로그 글을 참고하니 8X8의 체스판이라는 말이 중요했다.
8X8 체스판을 미리 만들어 두고 값이 다른 횟수가 최소인 경우를 출력하면 되는 문제였다.
소스 코드
#include <iostream>
#include <string>
using namespace std;
string board[51];
string WB[8] = {
"WBWBWBWB",
"BWBWBWBW",
"WBWBWBWB",
"BWBWBWBW",
"WBWBWBWB",
"BWBWBWBW",
"WBWBWBWB",
"BWBWBWBW"
};
string BW[8] = {
"BWBWBWBW",
"WBWBWBWB",
"BWBWBWBW",
"WBWBWBWB",
"BWBWBWBW",
"WBWBWBWB",
"BWBWBWBW",
"WBWBWBWB"
};
int WB_cnt(int x, int y)
{
int cnt = 0;
for (int i = 0; i < 8; i++)
{
for (int j = 0; j < 8; j++)
{
if (board[x + i][y + j] != WB[i][j])
cnt++;
}
}
return cnt;
}
int BW_cnt(int x, int y)
{
int cnt = 0;
for (int i = 0; i < 8; i++)
{
for (int j = 0; j < 8; j++)
{
if (board[x + i][y + j] != BW[i][j])
cnt++;
}
}
return cnt;
}
int main() {
int min_num = 9999999;
int dx;
int dy;
cin >> dx >> dy;
for (int i = 0; i < dx; i++)
cin >> board[i];
for (int i = 0; i + 8 <= dx; i++)
{
for (int j = 0; j + 8 <= dy; j++)
{
int tmp;
tmp = min(WB_cnt(i, j), BW_cnt(i, j));
if (tmp < min_num) {
min_num = tmp;
}
}
}
cout << min_num;
return 0;
}
'알고리즘' 카테고리의 다른 글
[백준] 2606번 바이러스 C++ 문제풀이 (0) | 2023.08.31 |
---|---|
[백준] 1012번 유기농 배추 C++ 문제풀이 (0) | 2023.08.30 |
[백준] 1946번 신입 사원 C++ 문제풀이 (0) | 2023.08.21 |
[백준] 16953번 A -> B C++ 문제풀이 (0) | 2023.08.20 |
[백준] 1783번 병든 나이트 C++ 문제풀이 (0) | 2023.08.18 |