[프로그래머스] 호텔 대실 (JS)

hhkim·2023년 10월 24일
0

Algorithm - JavaScript

목록 보기
164/188
post-thumbnail

풀이 과정

  1. 입실 시간 오름차순으로 정렬
  2. 2차원 방 배열 만들기
  3. 각 예약에 대해 반복
  4. 입실, 퇴실 시간을 분 단위로 환산하기
  5. 각 방 배열에 대해 반복
  6. 퇴실 시간(청소 완료 시간)이 가장 빠른 방 찾기
    찾은 퇴실 시간보다 현재 예약의 입실 시간이 더 빠르다면 새 방에 담기
    아니면 현재 배열에 넣기
  7. 방 배열의 길이 리턴

코드

function solution(book_time) {
  book_time.sort();

  const rooms = [];
  for (const [itStr, otStr] of book_time) {
    const [it, ot] = [calculateMin(itStr), calculateMin(otStr) + 10];
    let minOt = Infinity;
    let roomNumber;
    for (let i = 0; i < rooms.length; ++i) {
      if (!rooms[i].length) break;
      const last = rooms[i].at(-1);
      if (last < minOt) {
        minOt = last;
        roomNumber = i;
      }
    }
    if (minOt > it) rooms.push([ot]);
    else rooms[roomNumber].push(ot);
  }

  return rooms.length;
}

function calculateMin(str) {
  const [h, m] = str.split(':').map(Number);
  return h * 60 + m;
}

🦾

당장 입퇴실 시간이 겹치지 않는 방에 넣는 것이 아니라, 모든 방의 퇴실 시간을 탐색한 후 가장 좋은 경우의 수를 찾았어야 했다.

0개의 댓글