본문 바로가기
  • 살짝 구운 김 유나
Algorithm/Programmers

[Lv.2] 호텔 대실 - JavaScript

by yunae 2023. 3. 24.

문제

https://school.programmers.co.kr/learn/courses/30/lessons/155651

 

프로그래머스

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

programmers.co.kr

 

풀이

- 문자열 시간을 숫자로 바꿔준다.

- 체크인 시간, 체크아웃 시간 + 청소시간을 저장해둔다.

- 입실 시간이 빠른 순서대로 정렬한다.

- room 배열을 선언한 후, 순회하면서 체크인 하려는 시간이 어떤 방의 체크아웃+청소시간보다 늦은 경우 입실시키고 그렇지 않은 경우에는 새로운 방을 생성(push)한다.

- 사용한 방의 개수(room.length)를 출력한다. 

 

코드

function solution(book_time) {
  let arr = [];

  book_time.forEach((time) => {
    let checkIn = stringToTime(time[0]);
    let chectOut = stringToTime(time[1]);
    // 체크인, 체크아웃 + 청소시간 배열에 저장
    arr.push([checkIn, chectOut + 10]);
  });

  // 입실시간 오름차순으로 정렬하기
  arr.sort((a, b) => a[0] - b[0]);

  let room = [arr[0][1]];
  for (let i = 1; i < arr.length; i++) {
    for (let j = 0; j < room.length; j++) {
      // 입실할 수 있는 조건이면
      if (room[j] <= arr[i][0]) {
        // 입실하고
        room[j] = arr[i][1];
        // 다음 손님으로 넘어가기
        break;
      } else {
        // 입실할 수 없고 모든 방을 조회했다면
        if (j === room.length - 1) {
          // 새로운 방을 생성하고
          room.push(arr[i][1]);
          // 다음 손님으로 넘어가기
          break;
        }
      }
    }
  }
  // 사용된 방의 개수를 출력
  return room.length;
}

// 문자열을 시간으로 변환하기
const stringToTime = (str) => {
  const [hour, minute] = str.split(":");
  return parseInt(hour) * 60 + parseInt(minute);
};

 

 

 

 

'Algorithm > Programmers' 카테고리의 다른 글

[Lv.2] 미로 탈출 - JavaScript  (0) 2023.04.11
[Lv.2] 양궁 대회 - JavaScript  (0) 2023.03.28
[Lv.2] 프린터 - JavaScript  (0) 2023.03.21
[Lv.2] 피로도 - JavaScript  (0) 2023.03.18
[Lv.2] 이진변환 반복하기 -JavaScript  (0) 2023.03.12

댓글