본문 바로가기

BOJ/정렬

BOJ : 1931 회의실 배정 (JS , nodeJS)

728x90

소스코드

let fs = require('fs');
const filePath = process.platform === `linux` ? `/dev/stdin` : `예제.txt`; 
let input = fs.readFileSync(filePath).toString().split('\n');
const c = console.log

n = Number(input[0])

let lst = []

for(let i = 1 ; i < n+1 ; i++){
    let numbers = input[i].split(" ").map(Number)
    lst.push(numbers)
}
lst.sort((a, b) => {
        return a[0] - b[0]
    })

lst.sort((a,b) =>{
        return a[1] - b[1]
})

final = 0
let temp = 0 

for(i in lst){
    if (lst[i][0] >= final){
        temp +=1
        final = lst[i][1]
    }
}

c(temp)

 

풀이

처음에는 시작시간 순서대로 포문을 굴려 배열에 count 값을 다 구한 후 최댓값을 뽑아내려 했는데 이렇게 되면 시간 복잡도가 엄청나게 증가하기 때문에 더 좋은 방법을 선택하게 되었다.

 

더 좋은 방법은 일단, 시작 시간에 대해 오름차순으로 정렬을 시켜준다. 그 후 끝나는 시간에 대해 오름차순으로 정렬을 시켜준다. 여기서 '왜 끝나는 시간만 정렬하면 되지 않느냐?'라는 의문점을 가지고 있을 텐데, 만약에 같은 시작 시간과 종료 시간을 가진다면 순서가 엉킬 수 있기 때문에 먼저 시작 시간에 대해 정렬을 해주는 것이다.

 

문제

https://www.acmicpc.net/problem/1931

 

1931번: 회의실 배정

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

www.acmicpc.net

 

728x90

'BOJ > 정렬' 카테고리의 다른 글

BOJ : 11870 좌표압축 (파이썬)  (0) 2022.12.02
BOJ : 2108 통계학 (파이썬)  (0) 2022.12.02
BOJ : 1461 도서관 (파이썬)  (0) 2022.11.20
BOJ : 1927 최소힙 (파이썬)  (1) 2022.09.11
BOJ : 20291 파일정리 (파이썬)  (2) 2022.09.10