[백준/Node.js] 테트로미노 #14500

welchs·2021년 8월 1일
0

백준

목록 보기
4/10
var fs = require('fs');
var input = fs.readFileSync('/dev/stdin').toString().split('\n');

const solution = (N, M, board) => {
  const tetromino = {
    // ****
    1: [
      [0, 0],
      [0, 1],
      [0, 2],
      [0, 3],
    ],
    // *
    // *
    // *
    // *
    2: [
      [0, 0],
      [1, 0],
      [2, 0],
      [3, 0],
    ],
    // **
    // **
    3: [
      [0, 0],
      [0, 1],
      [1, 0],
      [1, 1],
    ],
    // *
    // *
    // **
    4: [
      [0, 0],
      [1, 0],
      [2, 0],
      [2, 1],
    ],
    //   *
    // ***
    5: [
      [0, 2],
      [1, 0],
      [1, 1],
      [1, 2],
    ],
    // **
    //  *
    //  *
    6: [
      [0, 0],
      [0, 1],
      [1, 1],
      [2, 1],
    ],
    // ***
    // *
    7: [
      [0, 0],
      [0, 1],
      [0, 2],
      [1, 0],
    ],
    // *
    // **
    //  *
    8: [
      [0, 0],
      [1, 0],
      [1, 1],
      [2, 1],
    ],
    //  **
    // **
    9: [
      [0, 1],
      [0, 2],
      [1, 0],
      [1, 1],
    ],
    // ***
    //  *
    10: [
      [0, 0],
      [0, 1],
      [0, 2],
      [1, 1],
    ],
    // *
    // **
    // *
    11: [
      [0, 0],
      [1, 0],
      [1, 1],
      [2, 0],
    ],
    //  *
    // ***
    12: [
      [0, 1],
      [1, 0],
      [1, 1],
      [1, 2],
    ],
    //  *
    // **
    //  *
    13: [
      [0, 1],
      [1, 0],
      [1, 1],
      [2, 1],
    ],
    //  *
    //  *
    // **
    14: [
      [0, 1],
      [1, 1],
      [2, 0],
      [2, 1],
    ],
    // *
    // ***
    15: [
      [0, 0],
      [1, 0],
      [1, 1],
      [1, 2],
    ],
    // **
    // *
    // *
    16: [
      [0, 0],
      [0, 1],
      [1, 0],
      [2, 0],
    ],
    // ***
    //   *
    17: [
      [0, 0],
      [0, 1],
      [0, 2],
      [1, 2],
    ],
    //  *
    // **
    // *
    18: [
      [0, 1],
      [1, 0],
      [1, 1],
      [2, 0],
    ],
    // **
    //  **
    19: [
      [0, 0],
      [0, 1],
      [1, 1],
      [1, 2],
    ],
  };
  let max = 0;
  let sum, x, y, flag;
  for (let i = 0; i < N; i++) {
    for (let j = 0; j < M; j++) {
      for (const blocks of Object.values(tetromino)) {
        sum = 0;
        flag = true;
        for (let k = 0; k < 4; k++) {
          [y, x] = blocks[k];
          if (y + i >= N || x + j >= M) {
            flag = false;
            break;
          }
          if (flag) sum += board[y + i][x + j];
        }
        max = Math.max(max, sum);
      }
    }
  }
  return max;
};

const [N, M] = input[0].split(' ').map((v) => Number(v));
const board = input.slice(1).map((v) => v.split(' ').map((v) => Number(v)));
console.log(solution(N, M, board));
profile
고수가 되고 싶은 조빱

0개의 댓글