알고리즘

C++ 알고리즘 - 백준 1018 체스판 다시 칠하기

마루설아 2024. 12. 29. 18:06

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

 

#include <iostream>
#define endl "\n"

using namespace std;

char chess1[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'}
};

char chess2[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 input[50][50] = { "" };

int main(void) {
	// C++ Init
	ios::sync_with_stdio(false);
	cin.tie(NULL);

	int input1, input2;
	int min = 0, answer = -1;
	char chk;
	char ch;

	cin >> input1 >> input2;
	for (int i = 0; i < input1; i++) {
		for (int j = 0; j < input2; j++) {
			cin >> ch;
			input[i][j] = ch;
		}
	}

	for (int i = 0; i < input1 - 7; i++) {
		for (int j = 0; j < input2 - 7; j++) {
			min = 0;

			for (int k = i; k < i + 8; k++) {
				for (int l = j; l < j + 8; l++) {	
					if (chess1[k - i][l - j] == input[k][l]) continue;
					else min++;
				}
			}

			if (answer == -1) answer = min;
			if (answer > min) answer = min;
		}
	}

	for (int i = 0; i < input1 - 7; i++) {
		for (int j = 0; j < input2 - 7; j++) {
			min = 0;

			for (int k = i; k < i + 8; k++) {
				for (int l = j; l < j + 8; l++) {
					if (chess2[k - i][l - j] == input[k][l]) continue;
					else min++;
				}
			}

			if (answer == -1) answer = min;
			if (answer > min) answer = min;
		}
	}

	if (answer == -1) answer = 0;
	cout << answer;
}