[백준] JS 2563번 색종이

레고·2022년 12월 30일
0

문제

백준 2563번 색종이

가로, 세로의 크기가 각각 100인 정사각형 모양의 흰색 도화지가 있다. 이 도화지 위에 가로, 세로의 크기가 각각 10인 정사각형 모양의 검은색 색종이를 색종이의 변과 도화지의 변이 평행하도록 붙인다. 이러한 방식으로 색종이를 한 장 또는 여러 장 붙인 후 색종이가 붙은 검은 영역의 넓이를 구하는 프로그램을 작성하시오.

풀이 및 코드

분명 점화식을 만들어 3중 for문의 사용을 지양하려고 했으나, 일단 문제가 분류된 카테고리 대로 2차원 배열로 풀이를 해보았다.

const input = require("fs")
  .readFileSync(__dirname + "/input.txt")
  .toString()
  .trim()
  .split("\n")
  .map((x) => x.split(" ").map(Number));

let answer = 0;
let n = input.shift();
let xMax = -1;
let yMax = -1;
for (let i = 0; i < n; i++) {
  xMax = Math.max(xMax, input[i][0] + 10);
  yMax = Math.max(yMax, input[i][1] + 10);
}

let board = Array.from(Array(xMax), () => Array(yMax).fill(0));

for (let i = 0; i < n; i++) {
  for (let j = input[i][0]; j < input[i][0] + 10; j++) {
    for (let k = input[i][1]; k < input[i][1] + 10; k++) {
      if (board[j][k] == 0) {
        board[j][k] = 1;
        answer++;
      }
    }
  }
}

console.log(answer);
  1. 색종이가 차지하는 가장 큰 x, y좌표를 구하고, 그 크기에 해당하는 0으로 초기화된 2차원 배열을 생성한다.
  2. 색종이가 차지하고 있을 좌표에 0이 존재할 때 1로 재할당하며, 동시에 answer++ 연산을 해주면 넓이를 도출할 수 있다.
profile
Way to go

0개의 댓글