회의실 배정 - Node.js

프동프동·2022년 8월 6일
0

알고리즘 - Node.js

목록 보기
85/116
post-thumbnail

회의실 배정


문제

한 개의 회의실이 있는데 이를 사용하고자 하는 n개의 회의들에 대하여 회의실 사용표를 만들 려고 한다. 각 회의에 대해 시작시간과 끝나는 시간이 주어져 있고, 각 회의가 겹치지 않게 하 면서 회의실을 사용할 수 있는 최대수의 회의를 찾아라. 단, 회의는 한번 시작하면 중간에 중 단될 수 없으며 한 회의가 끝나는 것과 동시에 다음 회의가 시작될 수 있다.

입력

첫째 줄에 회의의 수 n(1<=n<=100,000)이 주어진다. 둘째 줄부터 n+1 줄까지 각 회의의 정 보가 주어지는데 이것은 공백을 사이에 두고 회의의 시작시간과 끝나는 시간이 주어진다. 회의의 시작시간과 끝나는 시간의 조건은 (시작시간 <= 끝나는 시간)입니다.

출력

첫째 줄에 최대 사용할 수 있는 회의 수를 출력하여라.

입력 예시 1

1 4
2 3
3 5
4 6
5 7

출력 예시 1

3

입력 예시 2

3 3
1 3
2 3

출력 예시 2

2


해결방법

  1. 회의시간이 끝나는 기준으로 정렬한다.
  2. 만약 끝나는 회의시간이 같으면 시작시간 기준으로 정렬한다.
  3. 기록된 회의의 끝나는 시간과 같거나 이후에 회의가 시작하면 회의 횟수를 증가시킨다.
  4. 그리고 해당 회의의 끝나는 시간을 다시 기록한다.
function solution(sample_data) {
  let answer = [];
  sample_data.sort((a, b) => {
    if (a[1] === b[1]) {
      return a[0] - b[0];
    } else {
      return a[1] - b[1];
    }
  });
  let end_time = 0;
  for (let meeting of sample_data) {
    if (meeting[0] >= end_time) {
      answer++;
      end_time = meeting[1];
    }
  }
  return answer;
}

let sample_data2 = [
  [3, 3],
  [1, 3],
  [2, 3],
];
let sample_data = [
  [2, 7],
  [1, 3],
  [1, 2],
  [2, 5],
  [3, 6],
];
console.log(solution(sample_data2));
profile
좋은 개발자가 되고싶은

0개의 댓글