No Rules Rules

체스판 다시 칠하기 (feat. 백준, 1018번) 본문

생활/코테

체스판 다시 칠하기 (feat. 백준, 1018번)

개발하는 완두콩 2022. 8. 1. 22:29
728x90
반응형

체스판 다시 칠하기
https://www.acmicpc.net/problem/1018

 

1018번: 체스판 다시 칠하기

첫째 줄에 N과 M이 주어진다. N과 M은 8보다 크거나 같고, 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 보드의 각 행의 상태가 주어진다. B는 검은색이며, W는 흰색이다.

www.acmicpc.net

반응형
// woohyeon.kim
// https://www.acmicpc.net/problem/1018
#include <iostream>
#include <cmath>
using namespace std;
char arr[50][50];
int get_min_redraw(register int sx, register int sy) {
	register int check1 = 0, check2 = 0;
	// 좌측 상단이 흰색일 경우 새로 칠해야 하는 개수
	for (register int i = sx, j; i < sx + 8; ++i)
		for (j = sy; j < sy + 8; ++j)
			if ((sx - i) & 1) {			// 행이 홀수일때
				if ((sy - j) & 1) {		// 열이 홀수일때
					if (arr[i][j] != 'W')			++check1;
				}
				else {
					if (arr[i][j] != 'B')			++check1;
				}
			}
			else {
				if ((sy - j) & 1) {		// 열이 홀수일때
					if (arr[i][j] != 'B')			++check1;
				}
				else {
					if (arr[i][j] != 'W')			++check1;
				}
			}
	// 좌측 상단이 검정색일 경우 새로 칠해야 하는 개수
	for (register int i = sx, j; i < sx + 8; ++i)
		for (j = sy; j < sy + 8; ++j)
			if ((sx - i) & 1) {			// 행이 홀수일때
				if ((sy - j) & 1) {		// 열이 홀수일때
					if (arr[i][j] != 'B')			++check2;
				}
				else {
					if (arr[i][j] != 'W')			++check2;
				}
			}
			else {
				if ((sy - j) & 1) {		// 열이 홀수일때
					if (arr[i][j] != 'W')			++check2;
				}
				else {
					if (arr[i][j] != 'B')			++check2;
				}
			}
	return min(check1, check2);
}
int main() {
	ios::sync_with_stdio(false), cin.tie(NULL);
	register int N, M, ans = static_cast<int>(1e9);
	cin >> N >> M;
	for (register int i = 0, j; i < N; ++i)
		for (j = 0; j < M; ++j)
			cin >> arr[i][j];
	for (register int i = 0, j; i <= (N - 8); ++i)
		for (j = 0; j <= (M - 8); ++j)
			ans = min(ans, get_min_redraw(i, j));
	cout << ans << "\n";
	return 0;
}
// *&)*@*
  1. 체스판은 좌측 상단이 W인 경우와 B인 경우, 2가지의 경우가 존재합니다.
  2. W인 경우, 8X8의 색이 정해져있고 마찬가지로 B인 경우, 8X8의 색이 정해져 있습니다.
  3. 따라서 상단 좌측부터 8X8씩 검사하고 그 뒤 좌측으로 한칸씩 검사합니다.
  4. 좌측 끝까지 (N-8까지) 검사가 끝났다면 다시 제일 좌측부터 그리고 다음 행부터 끝까지 검사합니다. (M-8까지)
728x90
반응형

'생활 > 코테' 카테고리의 다른 글

수 정렬하기 (feat. 백준, 2750번)  (0) 2022.08.02
영화감독 숌 (feat. 백준, 1436번)  (0) 2022.08.02
덩치 (feat. 백준, 7568번)  (0) 2022.08.01
분해합 (feat. 백준, 2231번)  (0) 2022.08.01
블랙잭 (feat. 백준, 2798번)  (0) 2022.08.01
Comments