2025년 01월 27일

2025. 1. 27 알고리즘 오답노트

알고리즘

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]);