Algorithm

[백준] 1931번: 회의실 배정 - Node.js (자바스크립트)

sqsung 2023. 6. 19. 23:28

1. 문제 ㅡ 1931번: 회의실 배정 (난이도: Silver I)

 

1931번: 회의실 배정

(1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다.

www.acmicpc.net

2. 풀이 ㅡ Node.js (자바스크립트)

const input = require('fs').readFileSync('/dev/stdin').toString().split('\n');
const N = +input.shift();
const meetingTimes = input.map(time => time.split(' ').map(val => +val));

const getMaxMeetings = (N, meetings) => {
  let answer = 1;

  
  // 💡 종료 시간이 같은 경우에는 시작 시간을 기준으로 정렬한다  
  meetings.sort((a, b) => (a[1] === b[1] ? a[0] - b[0] : a[1] - b[1]));

  let finishTime = meetings[0][1];

  for (let i = 1; i < N; i++) {
    if (finishTime > meetings[i][0]) continue;

    finishTime = meetings[i][1];
    answer += 1;
  }
  
  return answer;
};

console.log(getMaxMeetings(N, meetingTimes));

2-1. 풀이 설명

회의 종료 시간이 같은 경우에는 올바르게 정렬되지 않을 확률이 있다. 대신 아래와 같이 정렬하면 된다. 

 

   A) 종료 시간이 같지 않은 경우에는 종료 시간을 기준으로 오름차순 정렬 

   B) 종료 시간이 같은 경우에는 시작 시간을 기준으로 오름차순 정렬

 

이후 첫 회의의 종료 시간(finishTime)을 기준으로 잡고 1번 째 index에 위치한 회의부터 순회한다. 이때 순회 중인 회의의 시작 시간이 finishTime과 같거나 더 크면 finishTime을 업데이트 하고 answer를 1씩 증가한다.