알고리즘

프로그래머스 호텔 대실 (JAVA)

박카스마시며코딩 2023. 4. 4. 12:55

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

 

프로그래머스

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

programmers.co.kr

 

 

import java.util.*;
class Solution {
    private static class Reservation{
        int startTime;
        int endTime;
        public Reservation(int startTime, int endTime){
            this.startTime = startTime;
            this.endTime = endTime;
        }
    }
    public int solution(String[][] book_time) {
        int answer = 0;
        int size = book_time.length;
        Arrays.sort(book_time,(o1,o2)->{
            return o1[0].compareTo(o2[0]);
        });
        Reservation[] reservations = new Reservation[size];
        for(int i = 0 ; i < size ; i++){
            String[] str = book_time[i];
            Reservation reservation = changeReservation(str);
            reservations[i] = reservation;
        }
        PriorityQueue<Reservation> pq = new PriorityQueue<>((o1,o2)->{
            return o1.endTime - o2.endTime;
        });
        for(int i = 0 ; i < size ; i++){
            if(!pq.isEmpty() && pq.peek().endTime <= reservations[i].startTime){
                pq.poll();
            }
            pq.offer(reservations[i]);
            answer = Math.max(answer,pq.size());
        }
        return answer;
    }
    private static Reservation changeReservation(String[] str){
        int startTime = strToTime(str[0]);
        int endTime = strToTime(str[1]) + 10;
        return new Reservation(startTime,endTime);
    }
    private static int strToTime(String str){
        String[] temp = str.split(":");
        int hour = Integer.parseInt(temp[0]);
        int min = Integer.parseInt(temp[1]);
        return hour * 60 + min;
    }
}