[프로그래머스] 호텔 대실 / JavaScript / Level 2

KimYoungWoong·2023년 2월 13일
0

Programmers

목록 보기
45/60
post-thumbnail

🚩문제 주소


📄풀이

그리디

주어진 시간 배열을 입실 시간, 퇴실 시간으로 나누어 각각 분으로 바꿔줍니다.

정답 배열이 비어있다면 퇴실시간+10분을 해서 넣어줍니다.
비어 있지 않다면

  1. 가장 이른 시간 순으로 정렬합니다.
    • 이 부분에서 우선순위 큐를 활용한다면 더 효율적으로 해결할 수 있을 것 같다는 생각이 들었습니다.
  2. 방의 시간이 교체되었는지 확인하는 변수를 선언합니다.
  3. 정답배열을 순회하여 입실시간과 같거나 빠른 입실시간이 있다면 퇴실시간+10분을 하여 교체합니다.
  4. 교체변수를 바꿔주고 break

체크변수가 변하지 않았다면 정답배열에 퇴실시간+10분을 넣어줍니다.

최종적으로 정답배열의 길이를 반환합니다.



👨‍💻코드

const changeInt = (time) => { 
  // 주어진 타임스탬프를 분으로 바꿔주는 함수
  let [hour, minute] = time.split(':');
  return parseInt(hour)*60 + parseInt(minute);
}

const solution = (book_time) => {
  let answer = [];
  
  book_time.sort().forEach(time => {
      // 입실 시간, 퇴실 시간을 각각 바꿔주기
      const start = changeInt(time[0]);
      const end = changeInt(time[1]);
      
      if (answer.length === 0) {
          answer.push(end + 10);
      } else {
          answer = answer.sort(); // 가장 이른 시간으로 정렬
          let flag = true; // 방 교환되었는지 체크하는 변수
          for (let i=0; i<answer.length; i++) {
              if (answer[i] <= start) {
                  // 입실시간보다 빠른 청소되어있는 방이 있으면
                  answer[i] = end + 10; // 퇴실시간+10 넣기
                  flag = false; // 체크
                  break;
              }
          }
          // 체크가 한번도 안됬으면 새로운 방에 퇴실시간+10 넣기
          if (flag) answer.push(end + 10);
      }
  });
  
  return answer.length;
}

profile
블로그 이전했습니다!! https://highero.tistory.com

0개의 댓글