#include <iostream>
using namespace std;

int main()
{
	char board[51][51] = {};

	int n, m;
	cin >> n >> m;
	for (int i = 0; i < n; ++i)
		for (int j = 0; j < m; ++j)
			cin >> board[i][j];

	int minCount = 100000;
	
	for (int i = 0; i < n - 7; ++i)
	{
		for (int j = 0; j < m - 7; ++j)
		{
			int count = 0, count2 = 0;
			char firstColor = board[i][j];
			
			for (int k = 0; k < 8; ++k)
				for (int l = 0; l < 8; ++l) {
					if ((k + l) % 2 == 1) {
						if (board[i + k][j + l] == 'W')
							++count;
						if (board[i + k][j + l] == 'B')
							++count2;
					}
					if ((k + l) % 2 == 0) {
						if (board[i + k][j + l] == 'B')
							++count;
						if (board[i + k][j + l] == 'W')
							++count2;
					}
				}

			if (count < minCount)
				minCount = count;
			if (count2 < minCount)
				minCount = count2;
		}
	}
	cout << minCount;

	return 0;
}

 

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

 

1018번: 체스판 다시 칠하기

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

www.acmicpc.net

 

'알고리즘 공부' 카테고리의 다른 글

백준 2609번 최대공약수와 최소공배수 C++  (0) 2023.09.11
백준 1259번 팰린드롬수 C++  (0) 2023.09.06
백준 1697번 숨바꼭질  (0) 2023.03.21
백준 7576번 토마토  (0) 2023.03.16
백준 2178번 미로 탐색  (0) 2023.03.16