[Java] 프로그래머스 호텔대실

hyunnzl·2025년 3월 27일

프로그래머스

목록 보기
16/58
post-thumbnail

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

난이도

Level 2

문제

호텔을 운영 중인 코니는 최소한의 객실만을 사용하여 예약 손님들을 받으려고 합니다. 한 번 사용한 객실은 퇴실 시간을 기준으로 10분간 청소를 하고 다음 손님들이 사용할 수 있습니다.
예약 시각이 문자열 형태로 담긴 2차원 배열 book_time이 매개변수로 주어질 때, 코니에게 필요한 최소 객실의 수를 return 하는 solution 함수를 완성해주세요.

내 코드

자바

import java.util.*;

class Solution {
    public int solution(String[][] book_time) {
        Arrays.sort(book_time, (a, b) -> {
            if (a[0].equals(b[0])) return a[1].compareTo(b[1]);
            return a[0].compareTo(b[0]);
        });

        PriorityQueue<Integer> rooms = new PriorityQueue<>();

        for (String[] time : book_time) {
            int start = toMinute(time[0]);
            int end = toMinute(time[1]) + 10;

            if (!rooms.isEmpty() && rooms.peek() <= start) {
                rooms.poll();
            }

            rooms.offer(end);
        }

        return rooms.size();
    }

    private int toMinute(String time) {
        String[] t = time.split(":");
        return Integer.parseInt(t[0]) * 60 + Integer.parseInt(t[1]);
    }
}


자바스크립트

function solution(book_time) {
    book_time.sort((a, b) => {
        if (a[0] === b[0]) return a[1].localeCompare(b[1]);
        return a[0].localeCompare(b[0]);
    });
    
    function toMinute(time){
        const [h, m] = time.split(":").map(Number);
        return h * 60 + m;
    }
    
    var rooms = [];
    for (const [startStr, endStr] of book_time) {
        const start = toMinute(startStr);
        const end = toMinute(endStr) + 10;
        
        let flag = false;
        for(let i = 0; i < rooms.length; i++){
            if(rooms[i] <= start){
                flag = true;
                rooms[i] = end;
                break;
            }
        }
        if(!flag){
            rooms.push(end);
        }
    }
    
    return rooms.length;
}

0개의 댓글