Baekjoon/C++

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

Yo-mi 2023. 9. 24. 16:51
#include <iostream>
#include <string>

using namespace std;

int count(int n, int m, char* board[]) {
	int num = 2500;
	int num1 = 0;
	int num2 = 0;
	int result=2500;

	for (int a = 0; a < n - 7; a++) {
		for (int b = 0; b < m - 7; b++) {
			num1 = 0;
			num2 = 0;
			for (int i = a; i < 8 + a; i++) {
				for (int j = b; j < 8 + b; j++) {
						if ((i + j - a - b) % 2 == 0) {
							if (board[i][j] == 'B') {
								num1++;
							}
							else
								num2++;
						}
						else {
							if (board[i][j] == 'W')
								num1++;
							else
								num2++;
						}
				}
			}
			num = num1 > num2 ? num2 : num1;
			if (result > num)
				result = num;
			//cout << num1 << " " << num2 << " " << result << endl;
		}
	}

	return result;
}

int main() {
	int n, m, result;
	cin >> n >> m;
	char** board = new char * [n];

	for (int i = 0; i < n; i++) {
		board[i] = new char[m];
	}
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++) {
			cin >> board[i][j];
		}
	}


	result = count(n, m, board);

	cout << result;


	for (int i = 0; i < n; i++)
		delete[] board[i];

	delete[] board;
}

 

체스판을 무조건 8x8로 잘라낸다는 조건과 W으로 시작할 지, B으로 시작할 지에 집중했다.

 

 

 

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

 

1018번: 체스판 다시 칠하기

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

www.acmicpc.net