반 년? 정도 전에 이 문제를 맞닥뜨리고 포기했었다.
고작(?) 실버 문제에 막혔을때, 처음에는 그럴 수 있지 하며 다음에 풀어봐야지! 하고 넘어갔다.
반 년이 지나고 다시 풀어보려했는데, 똑같이 막혔다. 근데 반년이 지난 지금 계속 모르겠다고 안풀면 내가 나 스스로한테 실망해서 다른 사람의 코드를 보며 계속 이해하려 했고, 이해할 수 있었다!
이해하기 어려웠던 부분은 여러 조건들을 어떻게 다 만족하지 ? 였는데, 차근차근 생각해보며 맞춰볼 수 있었다.
//전체코드
let fs = require("fs");
let input = fs.readFileSync('/dev/stdin').toString().trim().split('\n');
let [size, ...arr] = input;
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",
];
//하얀색이 먼저 시작하는 판과 비교하여 다르다면 count
function whiteFirst(x, y) {
let count = 0;
for (let i = 0; i < 8; i++) {
for (let j = 0; j < 8; j++) {
if (arr[i + x][j + y] !== white[i][j]) count++;
}
}
return count;
}
//검은색이 먼저 시작하는 판과 비교하여 다르다면 count
function blackFirst(x, y) {
let count = 0;
for (let i = 0; i < 8; i++) {
for (let j = 0; j < 8; j++) {
if (arr[i + x][j + y] !== black[i][j]) count++;
}
}
return count;
}
//전체 판을 움직이는 형태로 작성했기에, -7을 해줌으로써 전체 판을 벗어나지 않게 해준다.
for (let j = 0; j < row - 7; j++) {
for (let k = 0; k < col - 7; k++) {
answer.push(whiteFirst(j, k));
answer.push(blackFirst(j, k));
}
}
console.log(Math.min(...answer));