백준/C++
백준 1018번 : 체스판 다시 칠하기 [C++]
대니스
2022. 8. 11. 11:08
주소 : https://www.acmicpc.net/problem/1018
1018번: 체스판 다시 칠하기
첫째 줄에 N과 M이 주어진다. N과 M은 8보다 크거나 같고, 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 보드의 각 행의 상태가 주어진다. B는 검은색이며, W는 흰색이다.
www.acmicpc.net
소스 코드 :
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string>
using namespace std;
int result = 64;
string board[50];
string wb[8] =
{
"WBWBWBWB",
"BWBWBWBW",
"WBWBWBWB",
"BWBWBWBW",
"WBWBWBWB",
"BWBWBWBW",
"WBWBWBWB",
"BWBWBWBW",
};
string bw[8] =
{
"BWBWBWBW",
"WBWBWBWB",
"BWBWBWBW",
"WBWBWBWB",
"BWBWBWBW",
"WBWBWBWB",
"BWBWBWBW",
"WBWBWBWB",
};
void wbcpr(int x, int y)
{
int count = 0;
for(int i=0;i<8;i++)
for (int j = 0;j < 8;j++)
{
if (wb[i][j] != board[y + i][x + j])
count++;
}
if (count < result)
result = count;
}
void bwcpr(int x, int y)
{
int count = 0;
for (int i = 0;i < 8;i++)
for (int j = 0;j < 8;j++)
{
if (bw[i][j] != board[y + i][x + j])
count++;
}
if (count < result)
result = count;
}
int main()
{
int m, n = 0;
cin >> m >> n;
for (int i = 0;i < m;i++)
cin >> board[i];
for(int y=0;y<m-7;y++)
for (int x = 0;x < n - 7;x++)
{
wbcpr(x, y);
bwcpr(x, y);
}
cout << result;
return 0;
}
마무리 : 체스판이 흰색, 검은색 번갈아가면서 색칠되었는지 확인하고 그렇지 않는다면 고쳐서 색칠해야한다. 흰색, 검은색이 번갈아 색칠했는지 어떻게 확인해야할지 잘 몰랐다. 처음에는 반복문 for문을 사용할가 생각했지만 그러기에는 8*8 사이즈로 어느 곳이든 허용되어야하기 때문에 다른 방법을 생각을 못 해 다른 사람들 것을 보아서 아예 흰색으로 시작한 체스판과 검은색으로 시작한 체스판을 만들어 비교를 하는 식으로 만들었다.