728x90

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

Code

최종 제출 코드 1
최종 제출 코드 2

😢 조건문을 이용해 풀려다가 시간을 조금 보낸 문제

😊 일단, 다른 풀이를 참고하여 단순하게 풀어봤다.
맨 왼쪽 위칸이 'W'일 때 또는 'B'일 때, 8*8체스판을 미리 작성해두었다.
그리고 입력받은 체스판 크기만큼 8*8씩 잘라서 반복적으로 비교하여 모든 경우의 수를 저장했다.
최종적으로 Math.min()을 이용해 최솟값을 출력해주었다.

이런 저런 방법으로 다시 풀어봐야겠다.

Full Code (https://github.com/DasolPark/Dasol_JS_Algorithm/tree/master/Baekjoon)

// Re-painting the chess board
 
// 1st Solution
 
// For submit
 
// const fs = require('fs');
// const input = fs.readFileSync('/dev/stdin').toString().trim().split('\n');
 
// For local test
// const input = [
// '8 8',
// 'WBWBWBWB',
// 'BWBWBWBW',
// 'WBWBWBWB',
// 'BWBBBWBW',
// 'WBWBWBWB',
// 'BWBWBWBW',
// 'WBWBWBWB',
// 'BWBWBWBW'
// ];
 
const input = [
'10 13',
'BBBBBBBBWBWBW',
'BBBBBBBBBWBWB',
'BBBBBBBBWBWBW',
'BBBBBBBBBWBWB',
'BBBBBBBBWBWBW',
'BBBBBBBBBWBWB',
'BBBBBBBBWBWBW',
'BBBBBBBBBWBWB',
'WWWWWWWWWWBWB',
'WWWWWWWWWWBWB'
];
 
const NM = input
.shift()
.split(' ')
.map(num => parseInt(num));
const N = NM.shift();
const M = NM.shift();
const minArr = [];
 
const whiteFirst = [
'WBWBWBWB',
'BWBWBWBW',
'WBWBWBWB',
'BWBWBWBW',
'WBWBWBWB',
'BWBWBWBW',
'WBWBWBWB',
'BWBWBWBW'
];
 
const blackFirst = [
'BWBWBWBW',
'WBWBWBWB',
'BWBWBWBW',
'WBWBWBWB',
'BWBWBWBW',
'WBWBWBWB',
'BWBWBWBW',
'WBWBWBWB'
];
 
function whiteFirstPaint(y, x) {
let counter = 0;
 
for (let i = y; i < y + 8; i++)
for (let j = x; j < x + 8; j++)
if (input[i][j] !== whiteFirst[i - y][j - x]) counter++;
 
return counter;
}
 
function blackFirstPaint(y, x) {
let counter = 0;
 
for (let i = y; i < y + 8; i++)
for (let j = x; j < x + 8; j++)
if (input[i][j] !== blackFirst[i - y][j - x]) counter++;
 
return counter;
}
 
for (let i = 0; i + 7 < N; i++) {
for (let j = 0; j + 7 < M; j++) {
minArr.push(whiteFirstPaint(i, j));
minArr.push(blackFirstPaint(i, j));
}
}
 
console.log(Math.min.apply(null, minArr));

+ Recent posts