반응형
문제 출처
https://www.acmicpc.net/problem/11000
문제 풀이
생각의 전환이 필요한 문제였다.
- 일단 시간들을 오름차순으로 정렬하자
- 정렬한 시간들을 탐색한다.
- 그때 start의 시간이라면 방이 하나 필요하다 "+1" 는 뜻
- 그때 end의 시간이라면 방을 하나 반납한다 "-1" 는 뜻
- 매순간 방을 최대로 쓴 값이 답이 된다.
- 왜냐하면 이미 우리는 강의실을 최적으로 정렬을 해놨기 때문에
그때 필수적으로 써야 했던 방의 개수가 최소의 강의실을 사용하는 것이 된다.
정답 코드
let fs = require('fs');
let [N, ...input] = fs.readFileSync('/dev/stdin').toString().trim().split("\n")
const data = input.map(v => v.split(" ").map(Number))
const objArr = [];
for(let [str,end] of data){
objArr.push({time:str, start:1}) //시작하는 시간이라면 1 (이유는 아래 적혀있음)
objArr.push({time:end, start:-1})//끝나는 시간이라면 -1
}
//(이유)
//시작하는 시간과 끝나는 시간이 같을 때는 끝나는 시간을 먼저 앞에다가 둔다.
//-왜냐하면, 문제에서 "Ti ≤ Sj 일 경우 i 수업과 j 수업은 같이 들을 수 있다." 고 써놨기 때문임.
//-- 이뜻은, 끝나는 시간과 시작 시간이 동일할 때 방을 같이 쓸 수 있기 때문에 방 반납후, 방 하나 추가 하는 의미임도.
objArr.sort((a,b)=>a.time===b.time ? a.start-b.start :a.time-b.time)
let max = 0;
let cur = 0;
for(let obj of objArr){
obj.start ? cur++ : cur--
max = max < cur ? cur : max
}
console.log(max)
반응형
'알고리즘 문제 풀기' 카테고리의 다른 글
백준 1300: k번째 수 - javascript(이진탐색) (0) | 2024.08.27 |
---|---|
백준 2437: 저울 - javascript(그리디) (0) | 2024.08.25 |
백준 12015 : 가장 긴 (LIS 알고리즘, 이진탐색) - javascript (0) | 2024.08.22 |
프로그래머스: 길 찾기 게임 - javascript(트리) (0) | 2024.08.22 |
백준 1744: 수 묶기 - javascript(그리디) (0) | 2024.08.21 |