Algorithm/๋ฐฑ์ค€(BOJ)

[JavaScript/BOJ] 1018 - ์ฒด์ŠคํŒ ๋‹ค์‹œ ์น ํ•˜๊ธฐ

_์„ฑํ˜ธ_ 2022. 9. 17. 17:44
728x90
๋ฐ˜์‘ํ˜•

๐Ÿ“Œ ๋ฌธ์ œ(๋ธŒ๋ฃจํŠธํฌ์Šค ์•Œ๊ณ ๋ฆฌ์ฆ˜)

 

1018๋ฒˆ: ์ฒด์ŠคํŒ ๋‹ค์‹œ ์น ํ•˜๊ธฐ

์ฒซ์งธ ์ค„์— N๊ณผ M์ด ์ฃผ์–ด์ง„๋‹ค. N๊ณผ M์€ 8๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , 50๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์—๋Š” ๋ณด๋“œ์˜ ๊ฐ ํ–‰์˜ ์ƒํƒœ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. B๋Š” ๊ฒ€์€์ƒ‰์ด๋ฉฐ, W๋Š” ํฐ์ƒ‰์ด๋‹ค.

www.acmicpc.net

 

๐Ÿ“ ํ’€์ด

๋งจ ์™ผ์ชฝ ์œ„ ์นธ์ด ํฐ์ƒ‰์ธ ๊ฒฝ์šฐ, ํ•˜๋‚˜๋Š” ๊ฒ€์€์ƒ‰์ธ ๊ฒฝ์šฐ์˜ ์ •์ƒ์ ์œผ๋กœ ์น ํ•ด์ง„ 8 x 8 ํฌ๊ธฐ์˜ ์ฒด์ŠคํŒ์„ ๋ฏธ๋ฆฌ ์ค€๋น„ํ•œ๋‹ค.

let white = ['WBWBWBWB', 'BWBWBWBW', 'WBWBWBWB', 'BWBWBWBW', 'WBWBWBWB', 'BWBWBWBW', 'WBWBWBWB', 'BWBWBWBW']
let black = ['BWBWBWBW', 'WBWBWBWB', 'BWBWBWBW', 'WBWBWBWB', 'BWBWBWBW', 'WBWBWBWB', 'BWBWBWBW', 'WBWBWBWB']

 

8 x 8 ํฌ๊ธฐ์˜ ์ฒด์ŠคํŒ์„ ์–ด๋–ป๊ฒŒ ๋–ผ์–ด์•ผํ• ๊นŒโ“

row x col ํฌ๊ธฐ์˜ ์ฒด์ŠคํŒ์—์„œ 8 x 8 ํฌ๊ธฐ์˜ ์ฒด์ŠคํŒ์„ ๋–ผ์–ด๋‚ผ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ƒ๊ฐํ•ด๋ณด์žโ—โ—

(0, 0) ์ขŒํ‘œ์—์„œ ์‹œ์ž‘ํ•˜์—ฌ (row - 8, col - 8) ์ขŒํ‘œ๊นŒ์ง€๋ฅผ ์‹œ์ž‘์œผ๋กœ 8 x 8 ํฌ๊ธฐ์˜ ์ฒด์ŠคํŒ์„ ๋–ผ์–ด๋‚ผ ์ˆ˜ ์žˆ๋‹คโ—โ—โ—

for (let i = 0; i <= row - 8; i++) {
    for (let j = 0; j <= col - 8; j++) {

      // whiteCheck, blackCheck
      
    }
  }

 

์ด์ œ ์ฒด์ŠคํŒ์„ ๋–ผ์–ด๋‚ผ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๋ฅผ ์ฐจ๋ก€๋Œ€๋กœ ํƒ์ƒ‰ํ•˜๋ฉด์„œ ์ •์ƒ์ ์œผ๋กœ ์น ํ•ด์ง„ ์ฒด์ŠคํŒ๊ณผ ๋น„๊ต๋ฅผ ํ•˜๋ฉด ๋œ๋‹ค.

๋งจ ์™ผ์ชฝ ์œ„ ์นธ์ด ํฐ์ƒ‰, ๊ฒ€์€์ƒ‰์ธ ๊ฒฝ์šฐ๋ฅผ ๊ฐ๊ฐ ๋น„๊ตํ•˜์—ฌ ๋‹ค์‹œ ์น ํ•ด์•ผํ•˜๋Š” ์ •์‚ฌ๊ฐํ˜•์˜ ์ˆ˜๋ฅผ answer ๋ฐฐ์—ด์— ์ถ”๊ฐ€ํ•œ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ Math.min()์„ ์ด์šฉํ•˜์—ฌ answer ๋ฐฐ์—ด์—์„œ์˜ ์ตœ์†Ÿ๊ฐ’์„ ๋ฆฌํ„ดํ•˜๋ฉด ๋œ๋‹ค.

// ์ „์ฒด ์ฝ”๋“œ
const fs = require('fs');
const input = fs.readFileSync('์˜ˆ์ œ.txt').toString().trim().split('\n');

let white = [
  'WBWBWBWB',
  'BWBWBWBW',
  'WBWBWBWB',
  'BWBWBWBW',
  'WBWBWBWB',
  'BWBWBWBW',
  'WBWBWBWB',
  'BWBWBWBW',
];

let black = [
  'BWBWBWBW',
  'WBWBWBWB',
  'BWBWBWBW',
  'WBWBWBWB',
  'BWBWBWBW',
  'WBWBWBWB',
  'BWBWBWBW',
  'WBWBWBWB',
];

function solution(input) {
  [size, ...arr] = input;
  [row, col] = size.split(' ').map((x) => Number(x));
  arr = arr.map((str) => str.trim('\r').split(''));
  let answer = [];

  // 8 * 8 ํฌ๊ธฐ์˜ ์ฒด์ŠคํŒ์„ ๋งŒ๋“œ๋Š” ๊ฒฝ์šฐ
  for (let i = 0; i <= row - 8; i++) {
    for (let j = 0; j <= col - 8; j++) {
      // whiteCheck, blackCheck
      let cnt1 = (cnt2 = 0);

      for (let k = 0; k < 8; k++) {
        for (let s = 0; s < 8; s++) {
          if (white[k][s] !== arr[i + k][j + s]) cnt1++;
          if (black[k][s] !== arr[i + k][j + s]) cnt2++;
        }
      }
      answer.push(cnt1);
      answer.push(cnt2);
    }
  }

  return Math.min(...answer);
}

console.log(solution(input));