[구름톤 챌린지] 폭탄 구현하기 (2) (JS)

hhkim·2023년 8월 24일
0

Algorithm - JavaScript

목록 보기
112/188
post-thumbnail

풀이 과정

  1. 땅과 크기가 같은 2차원 배열 생성하고 0으로 채우기
  2. 폭탄 위치 배열에 대해 반복
  3. dx, dy를 이용해 5번 반복하면서 주변 땅 확인
  4. 조건에 따라 1번 배열 값 바꾸기
  5. 1번 배열에서 가장 큰 값 찾기: flat()

코드

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 ===
    input[0]
      .split(' ')
      .map(Number)
      .reduce((a, n) => a + n, 0) +
      1
  ) {
    rl.close();
  }
});

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

  // 중앙, 위, 오른, 아래, 왼
  const dy = [0, -1, 0, 1, 0];
  const dx = [0, 0, 1, 0, -1];
  const arr = Array(N)
    .fill(0)
    .map((e) => Array(N).fill(0));
  for (const [y, x] of bombs) {
    for (let i = 0; i < 5; ++i) {
      const ny = y - 1 + dy[i];
      const nx = x - 1 + dx[i];
      if (ny < 0 || ny >= N || nx < 0 || nx >= N) continue;
      if (map[ny][nx] === '#') continue;
      if (map[ny][nx] === '0') arr[ny][nx] += 1;
      if (map[ny][nx] === '@') arr[ny][nx] += 2;
    }
  }

  console.log(Math.max(...arr.flat()));
  process.exit();
});

🤔

dy, dx 이용해서 푸는 문제고 크게 어려운 부분은 없었다.
헷갈리는 건 폭탄의 위치가 1부터 시작한다는 것, 맵의 크기와 폭탄 개수가 다를 수 있다는 것이다...

0개의 댓글