IF - 회의실 배정

Goody·2021년 4월 27일
0

알고리즘

목록 보기
92/122
post-custom-banner

문제

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


예시

Input1Output
[ [1, 4], [2, 3], [3, 5], [4, 6], [5, 7] ]3

(2, 3), (3, 5), (5, 7)이 회의실을 이용할 수 있다.


풀이 및 회고

  • 가능한 빨리 회의가 끝나면서, 회의 시간도 짧은 원소들을 골라내는 문제이므로, 그리디 알고리즘을 이용해 풀 수 있다.
  • 각 원소들을 회의 종료시간을 기준으로 오름차순 정렬한다. 회의 종료시간이 같으면 회의 시작시간을 기준으로 한다.
  • 각 회의는 시작시간이 직전 회의의 종료시간보다 같거나 클 때만 유효함을 식으로 나타낸다.

코드

const solution = (conf) => {
    let answer = 0;
    conf.sort((a,b) => {
        if(a[1] === b[1]) return a[0] - b[0]; 
        else return a[1] - b[1];
    });
    let et = 0;
    for (let x of conf) {
        if(x[0] >= et) {
            answer++;
            et = x[1];
        }
    }

    return answer;
};
post-custom-banner

0개의 댓글