알고리즘 공부

백준 1018번 체스판 다시 칠하기

빵어 2023. 8. 21. 18:24
#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