[구름톤 챌린지] 구름 찾기 깃발 (JS)

hhkim·2023년 8월 22일
0

Algorithm - JavaScript

목록 보기
110/188
post-thumbnail

풀이 과정

  1. 2차원 배열 만들기
  2. 각 배열 요소에 대해 반복: 2중 반복문
  3. 각 요소의 주변에 구름이 있는 수를 세서 값이 K면 결과 +1

코드

const readline = require('readline');
let rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});
let input = [];
rl.on('line', (line) => {
  input.push(line.trim());
  if (input.length === Number(input[0].split(' ')[0]) + 1) {
    rl.close();
  }
});

const DIR = [
  [-1, -1],
  [-1, 0],
  [-1, 1],
  [0, -1],
  [0, 1],
  [1, -1],
  [1, 0],
  [1, 1],
];

rl.on('close', () => {
  const [N, K] = input[0].split(' ').map(Number);
  const arr = [];
  for (let i = 1; i <= N; ++i) {
    arr.push(input[i].split(' '));
  }

  let result = 0;
  for (let i = 0; i < N; ++i) {
    for (let j = 0; j < N; ++j) {
      if (arr[i][j] === '1') continue;
      let cnt = 0;
      for (let k = 0; k < DIR.length; ++k) {
        const nextI = i + DIR[k][0];
        const nextJ = j + DIR[k][1];
        if (nextI < 0 || nextI >= N) continue;
        if (nextJ < 0 || nextJ >= N) continue;
        if (arr[nextI][nextJ] === '1') ++cnt;
      }
      if (cnt === K) ++result;
    }
  }
  console.log(result);
  process.exit();
});

🦾

어제 어려워서 오늘은 쉬어가는 건가..? 20분도 안 걸려서 풀었다.
비슷한 유형을 만나본 적이 있어서 방향 배열 만들고 반복문을 돌렸다.
3중 반복문을 작성하면서 찝찝했지만 반복 횟수가 많지 않아서 문제가 없었다.
유의할 점은 구름이 있는 칸('1')은 깃발을 세울 수 없으니 예외로 두어야 한다는 것이다.

1개의 댓글

comment-user-thumbnail
2023년 8월 22일

구름톤 챌린지 파이팅입니다 :)

답글 달기