체스판에 색을 다시칠해야 한다는것을 보자마자 일단 2차원배열이겠거니 생각했다.
그런데 변경을 최소한으로 하려면 어떻게해야할지 잠깐 고민을 했다.
설마 일일히 다 비교해야하나? 라는 생각을 했는데 문제 유형이 브루트포스였고 그게맞았다.
const fs = require("fs");
let [size, ...arr] = fs.readFileSync("ex.txt").toString().split("\n");
let [row, col] = size.split(" ");
arr = arr.map((i) => i.split(""));
const answer = [];
const WHITE = [
"WBWBWBWB",
"BWBWBWBW",
"WBWBWBWB",
"BWBWBWBW",
"WBWBWBWB",
"BWBWBWBW",
"WBWBWBWB",
"BWBWBWBW",
];
const BLACK = [
"BWBWBWBW",
"WBWBWBWB",
"BWBWBWBW",
"WBWBWBWB",
"BWBWBWBW",
"WBWBWBWB",
"BWBWBWBW",
"WBWBWBWB",
];
function checkWhite(x, y) {
let cnt = 0;
for (let i = 0; i < 8; i++) {
for (let j = 0; j < 8; j++) {
if (arr[i + x][j + y] === WHITE[i][j]) cnt++;
}
}
return cnt;
}
function checkBlack(x, y) {
let cnt = 0;
for (let i = 0; i < 8; i++) {
for (let j = 0; j < 8; j++) {
if (arr[i + x][j + y] === BLACK[i][j]) cnt++;
}
}
return cnt;
}
for (let i = 0; i < row - 7; i++) {
for (let j = 0; j < col - 7; j++) {
answer.push(checkWhite(i, j));
answer.push(checkBlack(i, j));
}
}
console.log(Math.min(...answer));