알고리즘/백준
[백준] 체스판 다시 칠하기
혬혬
2019. 12. 31. 17:07
728x90
먼저 white로 시작하는 체스판과 black으로 시작하는 체스판을 만들어 놓고 비교한다
모든 점을 시작점으로 하는 완전 탐색을 해서 최솟값을 찾았다.
#include<stdio.h>
#include<vector>
#include<iostream>
#include <algorithm>
using namespace std;
int main(void) {
freopen("inp.inp", "r", stdin);
freopen("out.out", "w", stdout);
int white[50][50] = { 0 };
int black[50][50] = { 0 };
int board[50][50] = { 0 };
bool signal = 0;
int n = 0, m = 0;
scanf("%d %d", &n, &m);
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
white[i][j] = signal;
black[i][j] = !signal;
signal = !signal;
}
if(m%2==0)
signal = !signal;
}
char box = 0;
scanf("%c", &box);
int s = 0;
int min = 1000000;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
scanf("%c", &box);
if (box == 'W')
board[i][j] = 1;
else
board[i][j] = 0;
}
scanf("%c", &box);
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
int white_total = 0;
int black_total = 0;
if (i + 8 <= n&&j + 8 <= m) {
for (int q = i; q < i + 8; q++) {
for (int p = j; p < j + 8; p++) {
s = board[q][p];
if (white[q][p] != s)
white_total++;
if (black[q][p] != s)
black_total++;
}
}
if (white_total < min)
min = white_total;
if (black_total < min)
min = black_total;
}
}
}
printf("%d", min);
return 0;
}
https://www.acmicpc.net/problem/1018
728x90