Programmers : 호텔 대실

·2023년 3월 17일
0

알고리즘 문제 풀이

목록 보기
84/165
post-thumbnail

풀이 요약

우선순위 큐

풀이 상세

  1. 시작값을 기준으로 book_time 배열을 정렬 한다. rooms 라는 배열에 종료+10종료 + 10 의 값을 넣어두고 이보다 현재 시작값이 동일하거나 크면 현재 그 방에 들어갈 수 있다.
  2. 또 하나의 방을 준비하는 경우에는 그 방이 언제 종료가 되는지 알기 위해서 종료+10종료+10 을 남겨주자. 우선순위 큐를 구현하기엔 귀찮아서 새로운 방으로 업데이트 될 때 마다 rooms 배열을 오름차순 정렬해주었다.
  3. rooms 를 매번 정렬하는 이유는 가장 빨리 종료되는 방에 다음 예약이 들어갈 수 없는 경우, 그때는 추가로 객실을 하나더 구해야한다는 것을 알 수 있기 때문이다.

배운점

  • 자바스크립트에서 sort() 할때는 디폴트 같은 거 없으니 꼭 안에 우선순위 식 써주기!
function solution(book_time) {
    let book_time_min = book_time.map((el)=> {
        let [st_h, st_m] = el[0].split(":");
        let [ed_h, ed_m] = el[1].split(":");
        let st_time = st_h*1*60 + st_m*1;
        let ed_time = ed_h*1*60 + ed_m*1;
        return [st_time, ed_time];
    });
    book_time_min.sort((a,b)=>a[0]-b[0]);
    const rooms = [book_time_min[0][1]+10];
    for(let i=1; i<book_time_min.length; i++) {
        let curr_time_st = book_time_min[i][0];
        if(rooms[0]>curr_time_st) {
            rooms.push(book_time_min[i][1]+10);
            rooms.sort((a,b)=>a-b);
        } else {
            for(let j=rooms.length-1; j>=0; j--) {
                if(rooms[j]<=curr_time_st) {
                    rooms[j] = book_time_min[i][1]+10;
                    rooms.sort((a,b)=>a-b);
                    break;
                }
            }
        }       
    }
    return rooms.length;
}
profile
새로운 것에 관심이 많고, 프로젝트 설계 및 최적화를 좋아합니다.

0개의 댓글