1. 입력으로 주어진 nxm 보드판에서 체스판(8x8)로 자른다.
2. 체스판(8x8) 에서 예상한 컬러와 현재 컬러가 다르다면 변경 횟수를 1증가시킨다.
체스판의 종류는 2가지
1. (0,0) 이 블랙(B)으로 시작하면서 교차로 색이 나오는 체스판
2. (0,0) 이 화이트(W)로 시작하며서 교차로 색이 나오는 체스판
두 개의 경우는 다 비교해야 하지만,
사실은 둘 중 하나만 하더라도 64 - (둘 중 하나를 돌렸을 때 나오는 경우) 로 나머지도 구할 수 있었다.
편의상 1, 2 체스판을 각각 블랙 체스판, 화이트 체스판이라고 말하겠다.
따라서 나는 화이트 체스판이라고 가정해서 풀었다.
화이트 체스판에서 예상한 컬러 구하는 법
1. 인덱스가 홀수 + 홀수 이거나 짝수 + 짝수 -> 화이트(W)
2. 인덱스가 홀수 + 짝수 이거나 짝수 + 홀수 -> 블랙(B)
👉 인덱스를 모두 더했을 때 홀수의 경우 블랙(B)이고, 짝수일 경우 화이트(W) 알 수 있다.
전체 코드는 다음과 같다.
const fs = require("fs");
const input = fs.readFileSync("./example.txt", "utf8").trim().split("\n");
const [n, m] = input[0].split(" ").map(Number);
const board = input.slice(1);
let color, expectedColor;
let answer = Infinity;
for (let i = 0; i <= n - 8; i++) {
for (let j = 0; j <= m - 8; j++) {
let whiteChessCase = 0; // 화이트 체스(화이트로 시작하는 체스판)에서의 틀린 색의 개수
for (let r = 0; r < 8; r++) {
for (let c = 0; c < 8; c++) {
color = board[r + i][c + j];
expectedColor = (r + i + c + j) % 2 ? "B" : "W";
if (color !== expectedColor) {
whiteChessCase++;
}
}
}
// 최소 변경 횟수 업데이트 (화이트 체스일 때 변경해야 하는 수, 블랙 체스일 때 변경해야 하는 수, answer)
answer = Math.min(whiteChessCase, 64 - whiteChessCase, answer);
}
}
console.log(answer);
문제
'Algorithm' 카테고리의 다른 글
[JavaScript] 1446. 지름길 (1) | 2025.03.26 |
---|---|
[JavaScript] 구간 합 구하기 5 (1) | 2025.03.21 |
[JavaScript] 백준 1535. 안녕 (1) | 2025.03.12 |
[JavaScript] 백준 1976 - 여행 가자 (1) | 2025.03.11 |
[JavaScript] 백준 11725 - 트리의 부모 찾기 (0) | 2025.03.05 |