알고리즘

윤건호·2022년 10월 20일
0

알고리즘

목록 보기
23/23

회의실 배정 문제

한 개의 회의실이 있고 그 회의실을 시간대를 나눠서 사용할 수 있는
최대 경우의 수는 몇개인가?

끝나는 시간과 시작하는 시간이 동일해도 사용 가능하다


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축이다.

profile
더 배우고 싶은 프론트엔드 개발자 윤건호입니다.

0개의 댓글