호텔 대실

호텔 대실

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

example1

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


import java.util.*;

public class Main {
    public static void main(String[] args) {
        
        String[][] book_time = {{"2:10", "3:00"}, {"3:10", "4:00"}, {"4:00", "5:00"}};

        var reuslt = solution(book_time);

        System.out.println(reuslt);
    }

    public static int solution(String[][] book_time) {
        List<BookTime> bookTimes = new ArrayList<>(book_time.length);
        for (String[] time : book_time) {
            bookTimes.add(new BookTime(time[0], time[1]));
        }

        bookTimes.sort(Comparator.comparingInt(o -> o.start));
        
        Hotel hotel = new Hotel();
        for (BookTime time : bookTimes) {
            hotel.add(time);
        }

        return hotel.maxRoomSize;
    }
}

class Hotel {
    List<BookTime> rooms = new LinkedList<>();
    int maxRoomSize;
    int emptyRoomSize;
    int busyRoomSize;

    void add(BookTime time) {
        updateRoomState(time.start);
        if (emptyRoomSize == 0) {
            maxRoomSize++;
        } else {
            emptyRoomSize--;
        }
        busyRoomSize++;
        rooms.add(time);
    }

    void updateRoomState(int time) {
        for (int i = rooms.size() - 1; i > -1; i--) {
            BookTime bookTime = rooms.get(i);

            if (bookTime.end + 10 <= time) {
                emptyRoomSize++;
                busyRoomSize--;
                rooms.remove(bookTime);
            }
        }
    }
}

class BookTime {
    int start;
    int end;

    public BookTime(String start, String end) {
        String[] startTemp = start.split(":");
        this.start = Integer.parseInt(startTemp[0]) * 60 + Integer.parseInt(startTemp[1]);

        String[] endTemp = end.split(":");
        this.end = Integer.parseInt(endTemp[0]) * 60 + Integer.parseInt(endTemp[1]);

    }
}