Develop/백준 코딩테스트

백준 코딩테스트 회의실배정 1931 자바스크립트 node.js

codeGray 2022. 6. 30. 16:41
반응형

 

정답

//let input = require('fs').readFileSync('/dev/stdin').toString();
const input = require('fs').readFileSync('./input.txt').toString().trim().split('\n');

let count = Number(input.shift());
let list = [];
for(let i of input){
    list.push(i.split(' ').map(n => Number(n)));
}
solution(count, list);

function solution(count, list){
   list.sort(function(a, b){
        //끝나는 시간이 같으면 시작 시간 오름차순 정렬
        if(a[1] === b[1]) return a[0] - b[0]
        else return a[1] - b[1]
   });
   
   let result = 1;
   let temp = list[0][1]; //처음 회의 종료시간

   for( let i=1 ; i < count; i++){
        if(temp <= list[i][0]){
            temp = list[i][1];
            result += 1;
        }
   }
   console.log(result);
}

 

풀이

끝나는 시간 순으로 정렬하고 끝나는 시간이 같다면 시작 시간을 비교해서 오름차순으로 정렬한다.

3 8
8 10
12 12
11 12
9 14

위와 같을 경우 8 10 -> 12 12 먼저 계산해버리면 11 12가 성립이 안된다.

8 10 -> 11 12-> 12 12 (성립)

 

그리고 처음 회의 시작시간과 끝시간을 저장해서 비교하고 그 다음부터는 

회의 끝시간 - 다음 회의시작시간을 계산하고

다음 회의 끝시간과 다시 그다음 시작시간을 계산한다. (반복)

 

어렵다;;

반응형