치춘짱베리굿나이스

[백준] 1531 본문

투명

문제

세준이는 1×1크기의 그림으로 모자이크한 100×100크기의 그림을 가지고 있다. 어느 날 이 모자이크 중 일부 그림이 너무 보기 싫어서 N개의 불투명한 종이로 그림을 가리기 시작했다. 불투명한 종이로 가린다고 항상 그 그림이 안 보이는 것은 아니다. 그 그림의 현재 부분 위에 M개 이하의 종이가 올려져 있으면 그림은 그 부분에서 보이게 된다.

그림의 크기는 100×100이고, N개의 종이는 왼쪽 아래 모서리 좌표와 오른쪽 위 모서리 좌표가 입력으로 들어온다. 또, 종이가 가리는 영역에는 두 모서리의 좌표도 포함된다. 예를 들어, (1,1)부터 (2,2)를 가린다면, 총 4개의 그림이 가려진다. (1,1), (1,2), (2,1), (2,2).

100×100크기의 모자이크 중에 보이지 않는 그림의 개수를 세는 프로그램을 작성하시오.

입력

첫째 줄에 N과 M이 주어진다. N은 0보다 크거나 같고, 50보다 작거나 같다. M은 0보다 크거나 같고, 50보다 작거나 같다. 둘째 줄부터 N개의 줄에 종이의 좌표가 주어진다. 왼쪽 아래 모서리의 x, y좌표, 오른쪽 위 모서리의 x, y좌표 순으로 주어진다. 모든 좌표는 100보다 작거나 같은 자연수이다.

출력

첫째 줄에 정답을 출력한다.

풀이

const pic = () => {
  let input = require("fs")
    .readFileSync("/dev/stdin")
    .toString()
    .trim()
    .split("\\n")
    .map((n) => n.split(" ").map(Number));
  const m = input[0][1];
  let arr = Array(100);
  let ans = 0;
  for (let i = 0; i < 100; i++) arr[i] = Array.from({ length: 100 }, (n) => 0);
  for (let n of input) {
    for (let i = n[0] - 1; i < n[2]; i++)
      for (let j = n[1] - 1; j < n[3]; j++) arr[i][j]++;
  }
  for (let i = 0; i < 100; i++)
    for (let j = 0; j < 100; j++) if (arr[i][j] > m) ans++;
  console.log(ans);
};

pic();

반성회

100 * 100짜리 배열 생성 후 전부 0으로 초기화하고, 불투명한 종이가 덧대지는 부분마다 값을 1씩 증가시켰다

나중에는 2차원 배열을 전부 돌면서 m보다 값이 큰 영역의 개수를 셌다

'Javascript + Typescript > 자바스크립트로 알고리즘풀기' 카테고리의 다른 글

[백준] 2204  (0) 2022.03.17
[백준] 2435  (0) 2022.03.10
[백준] 1439  (0) 2022.03.10
[백준] 10610  (0) 2022.03.10
[백준] 1459  (0) 2022.03.10
Comments