호지

[프로그래머스] 호텔 대실 문제풀이 JS 본문

알고리즘/프로그래머스

[프로그래머스] 호텔 대실 문제풀이 JS

_hoji

우선순위 큐를 이용한 문제 풀이이다.

우선 book_time은 시작 시간을 기준으로 오름차순 정렬한다.

usingRoom배열에는 현재 대실 중인 방이 대실 종료 후 청소10분까지 완료되었을 때 시간이 저장되어 있다.

초기값으로 usingRoom에는 가장 빨리 대실이 시작한 방의 끝나는 시간을 저장하고

그 다음부터 모든 book_time을 순회한다.

usingRoom이 비어있지 않고

현재 방의 대실 시작 시간보다 사용 중인 방의 종료시간이 더 이른 모든 경우를

해당 방을 usingRoom에서 빼낸다(pop)

현재 방의 대실 및 청소 종료 시간을 usingRoom에 push하고

usingRoom은 내림차순으로 정렬한다.

현재 사용중인 방의 개수가 최소방개수보다 크다면

최소 방 개수를 업데이트 한다.

 

모든 과정을 마치게 되면 코니에게 필요한 최소 객실의 수를 구할 수 있다.

const getTime = (time) => {
  return +time.slice(0, 2) * 60 + +time.slice(3, 5)
}

function solution(book_time) {
  let minRoomCount = 1
  book_time.sort((a, b) => (a[0] > b[0] ? 1 : -1))
  let usingRoom = [getTime(book_time[0][1]) + 10]
  for (let i = 1; i < book_time.length; i++) {
    while (!usingRoom.empty && usingRoom[usingRoom.length - 1] <= getTime(book_time[i][0])) {
      usingRoom.pop()
    }
    usingRoom.push(getTime(book_time[i][1]) + 10)
    usingRoom.sort((a, b) => b - a)
    minRoomCount = Math.max(usingRoom.length, minRoomCount)
  }
  return minRoomCount
}

https://school.programmers.co.kr/learn/courses/30/lessons/155651?language=javascript 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

Comments