[백준] 1018번 체스판 다시 칠하기

yugyeongKim·2022년 10월 1일
0

백준

목록 보기
48/52
post-custom-banner

풀이

const fs = require('fs');
const filePath = process.platform === 'linux' ? '/dev/stdin' : './input.txt';
let input = fs.readFileSync(filePath).toString().trim().split('\n');

const [N, M] = input.shift().split(' ').map(x => +x);
arr = input.map(x => x.trim().split(''));

const line = ['WBWBWBWB', 'BWBWBWBW'];
const answer = [];

for(let i=0; i <= M-8; i++) {
    for(let j=0; j <= N-8; j++) {

        for(let n=0; n < 2; n++) {
            let count = 0;

            for(let x=0; x < 8; x++) {
                for(let y=0; y < 8; y++) {
                    const crurr = arr[j+y][i+x];
                    if(crurr !== line[(n+x) % 2][y]) {
                        count++;
                    } 
            
                }
            }
            answer.push(count);
        }
    }
}

console.log(Math.min.apply(null, answer));

단순하게 생각했으면 됐다. 8X8 정사각형을 돌릴 이중for문, 그것을 감싸는 8X8정사각형을 자를 이중for문을 작성한다. 그리고 정사각형을 비교할 때, B로 시작하는 것과 W로 시작하는 것 두개 모두 확인하기 위해 for문을 또 돌려준다.

arr[(n+x) % 2][y]의 의미는 n=0일때 즉, W가 먼저 시작하는 것과 비교할 때 n=0 / x=0 => 짝수면 w , n=0 / x=1 => 홀수면 B, 이렇게 'WBWBWBWB', 'BWBWBWBW', 'WBWBWBWB', 'BWBWBWBW' 순으로 갔다가 n=1이되면 거꾸로 'BWBWBWBW', 'WBWBWBWB', 'BWBWBWBW', 'WBWBWBWB' 순으로 이루어진 정사각형을 비교할 수 있다. 이렇게 찾은 count에서 가장 작은 수를 출력하면된다.

post-custom-banner

0개의 댓글