# [Algorithm/JS] 백준 1931번 회의실 배정
# Question
한 개의 회의실이 있는데 이를 사용하고자 하는 N개의 회의에 대하여 회의실 사용표를 만들려고 한다. 각 회의 I에 대해 시작시간과 끝나는 시간이 주어져 있고, 각 회의가 겹치지 않게 하면서 회의실을 사용할 수 있는 회의의 최대 개수를 찾아보자. 단, 회의는 한번 시작하면 중간에 중단될 수 없으며 한 회의가 끝나는 것과 동시에 다음 회의가 시작될 수 있다. 회의의 시작시간과 끝나는 시간이 같을 수도 있다. 이 경우에는 시작하자마자 끝나는 것으로 생각하면 된다.
# Input
첫째 줄에 회의의 수 N(1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N+1 줄까지 각 회의의 정보가 주어지는데 이것은 공백을 사이에 두고 회의의 시작시간과 끝나는 시간이 주어진다. 시작 시간과 끝나는 시간은 231-1보다 작거나 같은 자연수 또는 0이다.
# Output
첫째 줄에 최대 사용할 수 있는 회의의 최대 개수를 출력한다.
# Example
# Input
11 1 4 3 5 0 6 5 7 3 8 5 9 6 10 8 11 8 12 2 13 12 14
Copied!
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# Output
4
Copied!
1
# Solution
const fs = require('fs'); const filePath = process.platform === 'linux' ? '/dev/stdin' : '../input.txt'; let input = fs.readFileSync(filePath).toString().trim().split('\n'); let n = Number(input[0]); let arr = new Array(n + 1); for (let i = 0; i < n; i++) { arr[i + 1] = input[i + 1].split(' ').map(Number); } arr.sort((a, b) => (a[1] === b[1] ? a[0] - b[0] : a[1] - b[1])); let cur = arr[0][1]; let ans = 1; for (let i = 1; i < n; i++) { if (arr[i][0] >= cur) { cur = arr[i][1]; ans++; } } console.log(ans);
Copied!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
← 11047번 동전 0 1026번 보물 →