ABOUT ME

Today
Yesterday
Total
  • [JavaScript]호텔 대실
    JavaScript_알고리즘 2024. 9. 5. 16:14

    1. 문제

     

     

    2. 접근 방법

     

    • 1 ≤ book_time의 길이 ≤ 1,000
    • book_time[i]는 ["HH:MM", "HH:MM"]의 형태로 이루어진 배열입니다
    • [대실 시작 시각, 대실 종료 시각] 형태입니다.
    • 시각은 HH:MM 형태로 24시간 표기법을 따르며, "00:00" 부터 "23:59" 까지로 주어집니다.
    • 예약 시각이 자정을 넘어가는 경우는 없습니다.
    • 시작 시각은 항상 종료 시각보다 빠릅니다.
    book_time result
    [["15:00", "17:00"], ["16:40", "18:20"], ["14:20", "15:20"], ["14:10", "19:20"], ["18:20", "21:20"]] 3
    [["09:10", "10:10"], ["10:20", "12:20"]] 1
    [["10:20", "12:30"], ["10:20", "12:30"], ["10:20", "12:30"]] 3

     

    3. 자바스크립트 코드

     

    function solution(book_time) {
      // 정답 값 리턴
      let answer = 0;
      // 들어온 시간 값 map을 통해서 리턴
      let sortedList = book_time.map((time) => {
        // 시작 시간 : 를 기준으로 Number로 치환 후 리턴
        let [...start] = time[0].split(":").map((value) => Number(value));
        //   끝나는 시간 : 를 기준으로 Number로 치환 후 리턴
        let [...end] = time[1].split(":").map((value) => Number(value));
        //   시작 시간과 끝나는 시간 분으로 치환
        start = start[0] * 60 + start[1];
        end = end[0] * 60 + end[1];
        //   시작, 끝 분으로 변환한 값 리턴
        return [start, end];
      });
      //   리스트 정렬
      sortedList.sort((a, b) => a[0] - b[0]);
      //   반복문을 통해서 answer 증가
      for (let i = 0; i < sortedList.length; i++) {
        answer += 1;
        // i 번인덱스까지 반복문 동작
        for (let j = 0; j < i; j++) {
          // 현재 i 번 인덱스의 시작 시간이 이전에 들어온 끝나는 시간 + 10 보다 크거나 같은 경우
          if (sortedList[i][0] >= sortedList[j][1] + 10) {
            // answer 1 감소
            answer -= 1;
            // 끝나는 시간 24:00 으로 갱신 처리 하여 방을 나왔다는 체크
            sortedList[j][1] = 1440;
            break;
          }
        }
      }
      return answer;
    }

     

    4. 문제를 풀고난 후 생각

     

    • 시간 문제의 경우 보통 분으로 치환하여 접근하는 것이 편하다.
    • 들어오는 Input 값을 : 을 기준으로 split 한 후 Number로 치환하여 새로운 리스트를 생성해준다.
    • 분으로 치환한 리스트를 sort 하여 입실 시간을 기준으로 정렬을 진행한다.
    • 정렬을 진행한 후 index 값을 1씩 증가시키며 현재 인덱스 이전의 인덱스들의 입실여부를 확인한다.
    • 입실 시간이 퇴실 시간 + 10분 보다 크거나 같은 경우 이전의 인덱스 값을 1440(24:00)으로 갱신해준다.

     

    5. 문제를 푸는데 도움이 되는 지식

     

    • 구현

    'JavaScript_알고리즘' 카테고리의 다른 글

    댓글

Designed by Tistory.