회의실 배정 문제
한 개의 회의실이 있고 그 회의실을 시간대를 나눠서 사용할 수 있는
최대 경우의 수는 몇개인가?
끝나는 시간과 시작하는 시간이 동일해도 사용 가능하다
function solution(meeting) {
let answer = 0;
meeting.sort((a, b) => {
if (a[1] === b[1]) return a[0] - b[0];
else return a[1] - b[1];
// y가 같으면 x로 정렬한다 / 다르면 y로 정렬한다
// 이 코드가 있어야 y가 같은 경우도 정확하게 찍힘
});
let et = 0;
for (let x of meeting) {
if (x[0] >= et) {
answer++;
et = x[1];
// y축의 값 넣어주고 if문에서 x축의 값과 비교
}
}
return answer;
}
let arr = [
[1, 4],
[2, 3],
[3, 5],
[4, 6],
[5, 7],
];
console.log(solution(arr));
meeting.sort((a, b) => {
if (a[1] === b[1]) return a[0] - b[0];
else return a[1] - b[1];
가장 핵심 코드이다.
넘겨받은 인자를 정렬 시키는데 코드를 잘 보면
a[1] = 즉 y축 이라고 표현했던 위치의 값이 b[1] 과 같다면
a[0] - b[0]
x축으로 오름 차순 정렬하겠다 라는 뜻이다.
아니면 a[1] - b[1] y축 오름 차순 정렬한다.
let et = 0;
for (let x of meeting) {
if (x[0] >= et) {
answer++;
et = x[1];
// y축의 값 넣어주고 if문에서 x축의 값과 비교
}
}
et의 초기값은 0 이고 만약 x[0] 이 et와 같거나 크다면.
answer++ 하는 구조이다.
당연히 et는 고정 값이 아니고 x[1] 즉 y축의 값이 된다.
위의 조건에서 끝나는 시간과 시작하는 시간이 같아도 된다. 라는 조건에 부합한다.
위에서 설명한 끝나는 시간은 y축 , 시작하는 시간은 x축이다.