[백준 14397] 해변 with node.js

waterglasses·2021년 9월 19일
0

📌 문제링크

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

📌 풀이

  • y방향이 짝수, 홀수냐에 따라 달라지기 때문에 나눠서 계산
  • 해변일 때에만 개수를 추가하여 길이를 구함

📌 코드

const fs = require('fs');
const stdin = (
  process.platform === 'linux'
    ? fs.readFileSync('/dev/stdin').toString().trim()
    : `4 6
....#.
.#....
..#..#
####..`
).split('\n');

const input = (() => {
  let line = 0;
  return () => stdin[line++];
})();

const getLenOfBeach = () => {
  let lenOfBeach = 0;

  let dx = [-1, -1, 0, 0, 1, 1];
  let dy_odd = [0, 1, -1, 1, 0, 1];
  let dy_even = [-1, 0, -1, 1, -1, 0];

  for (let x = 0; x < N; x++) {
    for (let y = 0; y < M; y++) {
      if (map[x][y] === '.') continue;

      for (let i = 0; i < 6; i++) {
        let nx = x + dx[i];
        let ny = y;

        if (x % 2 !== 0) ny += dy_odd[i];
        else ny += dy_even[i];

        if (nx < 0 || nx >= N || ny < 0 || ny >= M) continue;
        if (map[nx][ny] === '#') continue;

        lenOfBeach += 1;
      }
    }
  }

  return lenOfBeach;
};

const [N, M] = input().split(' ').map(Number);
const map = Array.from(new Array(N), () => input().split(''));

console.log(getLenOfBeach());
profile
매 순간 성장하는 개발자가 되려고 노력하고 있습니다.

0개의 댓글