[JS/백준]{구현}(20207) 달력

202209월 21

백준 문제 링크

문제 설명

연속된 스케줄이 존재할 경우 연속된 모든 스케줄은 연동이 되어있다고 판단이되어서

연속된 스케줄은 하나의 코팅지로 달력에 붙여지게 된다. 그말은 연속된 스케줄의 길이 최대 겹친 스케줄 갯수가

하나의 코팅지의 넓이가 된다. 예를 들어 예제 1번은 2~9까지 연속되어 있으며 최대 겹친 스케줄 갯수가 3이다

즉 [연속된 스케줄길이] + [최대 겹친 스케줄] = 하나의 코팅지 넓이가 된다.

스케줄이 중간에 끊길 경우 새로운 코팅지를 붙일 준비를 해야한다.

연속된 스케줄의 길이를 알기 쉽게하기위해 366일치 배열을 준비한다.

코드

const line = require("fs").readFileSync("./input.txt", "utf8");
const inputData = line.trim().split("\n");

const n = +inputData[0];

let calendar = Array(366).fill(0);

for (let i = 1; i < n + 1; i++) {
  const [x, y] = inputData[i].split(" ").map((val) => +val);
  for (let i = x - 1; i < y; i++) {
    calendar[i] += 1;
  }
}

let tmp = [];
let result = 0;

calendar.forEach((val) => {
  if (tmp.length && val === 0) {
    result += tmp.length * Math.max(...tmp);
    tmp = [];
  } else if (val != 0) {
    tmp.push(val);
  }
});
result += tmp.length;
console.log(result);