백준 1018 js

이진우·2025년 7월 24일
0

알고리즘문제

목록 보기
2/7

문제 링크

백준 1018

문제 해결

체스판에 색을 다시칠해야 한다는것을 보자마자 일단 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));
profile
츄라이츄라이

0개의 댓글