[백준] 1018 체스판 다시 칠하기 - Node.js

송철진·2023년 5월 15일
0

백준-Node.js

목록 보기
67/69

문제

https://www.acmicpc.net/problem/1018

solution

let fs = require("fs");
let input = fs.readFileSync("/dev/stdin").toString().trim()

const solution = input => {
  input = input.split('\n')
  const [a,b] = input[0].split(' ').map(Number)
  const board = input.slice(1)
  
  const bw = 'BWBWBWBW'
  const wb = 'WBWBWBWB'
  
  let arr = []
  
  for(let i=0; i<a-7; i++){
    for(let j=0; j<b-7; j++){
      let [bwC, wbC] = [0, 0]	// (3)
      for(let k=i; k<i+8; k+=2){	// (1)
        for(let l=j; l<j+8; l++){
          if(board[k][l] !== bw[l-j]) bwC++
          if(board[k][l] !== wb[l-j]) wbC++
        }
      }
      for(let k=i+1; k<i+9; k+=2){	// (2)
        for(let l=j; l<j+8; l++){
          if(board[k][l] !== wb[l-j]) bwC++
          if(board[k][l] !== bw[l-j]) wbC++
        }
      }
      arr.push(Math.min(bwC, wbC))
    }
  }

  return Math.min(...arr)
}

console.log(solution(input))

검은색이 먼저 시작하는 체스판에서 다시 칠해야할 칸 수를 bwC,
흰색이 먼저 시작하는 체스판에서 다시 칠해야할 칸 수를 wbC 라고 할 때,
주어진 board에서 시작위치 (i,j)를 바꿔가며 8x8 크기로 비교할 범위를 정했다.

(1) 정한 범위의 짝수 index 줄에서는

  • 'BWBWBWBW'와 비교 -> 다르면 bwC 증가
  • 'WBWBWBWB'와 비교 -> 다르면 wbC 증가

(2) 정한 범위의 홀수 index 줄에서는

  • 'WBWBWBWB'와 비교 -> 다르면 bwC 증가
  • 'BWBWBWBW'와 비교 -> 다르면 wbC 증가

그리고 최소값을 구해야하므로 Math.min()을 사용했다.


(3) 테스트 케이스에서 0이 나와야 하는데 나오지 않는 경우 있었다.
4중for문과 조건문 때문에 뭐가 문제인지 파악하기 복잡했는데
arr값을 콘솔 찍어보니 카운팅값 누적으로 확인됐다.
카운팅 초기값을 4중for문 블록 바깥에 작성했던 것!

profile
검색하고 기록하며 학습하는 백엔드 개발자

0개의 댓글