본문 바로가기

알고리즘 스터디

[Programmers] 호텔 대실 - Javascript

728x90

INDEX

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

     

    프로그래머스

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

    programmers.co.kr

     

     

    Solution

    시간은 24시간 내로 주어지고 분 단위로 주어집니다. 

    좀 무식한 접근 방식을 선택했습니다. 분을 하나의 배열 원소로 변환하고 대실 시간만큼의 범위를 카운팅합니다.

     

    24시간은 분으로 변환하면 24 X 60 = 1440 입니다. 

    const roomArr = new Array(60 * 24).fill(0);

    처음 주어지는 시간이 15:00 ~ 17:00 라고 한다면 분으로 변환했을 때 900 ~ 1020 입니다. 

    이를 배열의 인덱스라고 생각해봅니다.

    이제 다음 시간이 주어집니다. 16:40 ~ 18:20 이 주어지면 분으로 변환하면 1000 ~ 1100 입니다.

    이 때 최소로 필요한 방의 개수는 2개입니다. 제일 숫자가 큰(카운팅이 많이 된) 값을 출력하면 정답입니다.

     

    전체코드

    function timeToMinute(time) {
      return Number(time.split(":")[0]) * 60 + Number(time.split(":")[1]); //시간을 분으로 변환합니다.
    }
    function solution(book_time) {
      const roomArr = new Array(60 * 24).fill(0);
      let answer = 0;
      for (let i = 0; i < book_time.length; i++) {
        const [bTime, eTime] = book_time[i];
        for (let j = timeToMinute(bTime); j < timeToMinute(eTime) + 10; j++) {
          roomArr[j] += 1;
          if (answer < roomArr[j]) answer = roomArr[j];
        }
      }
      return answer;
    }