1. 체스판 다시 칠하기 (백준 1018번)
링크
사실 어떻게 풀어야할 지 몰라서 이것저것 시도했다. 백/흑 정사각형의 개수를 세서 맞추려고도 했으나, 예외가 있어서 이건 포기..
그래서 질문 게시판 참고하고 맨 위 첫칸의 색이 흑이냐 백이냐 케이스를 나눠서 비교하며 풀었다.
내 답안(정답)
const fs = require("fs");
let [n, ...board] = fs
.readFileSync(process.platform === "linux" ? "/dev/stdin" : "./input.txt")
.toString()
.trim()
.split("\n");
const [N, M] = n.split(" ").map(Number); // N = y, M = x
const w = [
"WBWBWBWB",
"BWBWBWBW",
"WBWBWBWB",
"BWBWBWBW",
"WBWBWBWB",
"BWBWBWBW",
"WBWBWBWB",
"BWBWBWBW",
];
const b = [
"BWBWBWBW",
"WBWBWBWB",
"BWBWBWBW",
"WBWBWBWB",
"BWBWBWBW",
"WBWBWBWB",
"BWBWBWBW",
"WBWBWBWB",
];
const result = [];
for (let i = 0; i <= N - 8; i++) {
for (let j = 0; j <= M - 8; j++) {
let white = 0;
let black = 0;
for (let k = 0; k < 8; k++) {
for (let l = 0; l < 8; l++) {
if (board[k + i][l + j] !== w[k][l]) white++;
if (board[k + i][l + j] !== b[k][l]) black++;
}
}
result.push(white);
result.push(black);
}
}
console.log(result.sort((a, b) => a - b)[0]);