회의실 배정

minho·2021년 10월 5일
0

코드

<script>
            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];
                })                
                let et=0;
                for(let x of meeting){                    
                    if(x[0]>=et){                        
                        answer++;
                        et=x[1];                        
                    }
                }
                return answer;
            }

            let arr=[[1, 4], [2, 3], [3, 5], [4, 6], [5, 7]];
            console.log(solution(arr));

원리

  • 최대한 많은 강의실을 확보하려면 회의 끝나는 시간이 작아야 더 많이 넣을수 있다.
    그러므로 arr[1]을 기준으로 정렬한다.
    만약 arr[1]이 같다면 arr[0]이 작은 순서대로 오름차순한다.
    회의시간이 전체 시간이 짧아야 더 많이 넣을수 있기 때문이다.
    -> 이렇게 정렬하여 끝나는 시간(e) <= 시작하는 시간(s) 이면 count를 +1해준다.

코드분석

  1. meeting[1]을 기준으로 오름차순으로 정렬한다.
  2. meeting[1]이 같을 경우에는 meeting[0]을 기준으로 오름차순 한다.
  3. et은 회의가 끝나는 시간이다.
    3-1. for 문을 돌려 meeting의 요소인 x[0]이 et보다 크면 다음 회의를 넣을수 있으므로 이때 answer값에 +1을 해준다.
profile
Live the way you think

0개의 댓글