본문 바로가기

Algorithm/BAEKJOON

[BOJ] 1018번 체스판 다시 칠하기 (C++)

728x90
반응형

https://www.acmicpc.net/problem/1018

 

1018번: 체스판 다시 칠하기

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

www.acmicpc.net

 

#include <iostream>
using namespace std;

char arr[51][51];
char white_arr[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 black_arr[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(arr[x + i][y + j] != white_arr[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(arr[x + i][y + j] != black_arr[i][j])
				result++;
		}
	}
	return result;
}

int main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	
	int n, m, result = 64;
	cin >> n >> m;
	for(int i = 0; i < n; i++){
		for(int j = 0; j < m; j++){
			cin >> arr[i][j];
		}
	}
	
	int t_white, t_black;
	for(int i = 0; i <= n - 8; i++) {
		for(int j = 0; j <= m - 8; j++){
			t_white = white_first(i, j);
			t_black = black_first(i, j);
			if(t_white < t_black){
				result = (t_white < result)? t_white : result;
			} else{
				result = (t_black < result)? t_black : result;
			}
		}
	}
	cout << result << '\n';
	
	return 0;
}
728x90
반응형