https://www.acmicpc.net/problem/1018
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 줄에서는
bwC
증가wbC
증가(2) 정한 범위의 홀수 index 줄에서는
bwC
증가wbC
증가그리고 최소값을 구해야하므로 Math.min()을 사용했다.
(3) 테스트 케이스에서 0이 나와야 하는데 나오지 않는 경우 있었다.
4중for문과 조건문 때문에 뭐가 문제인지 파악하기 복잡했는데
arr
값을 콘솔 찍어보니 카운팅값 누적으로 확인됐다.
카운팅 초기값을 4중for문 블록 바깥에 작성했던 것!