programmers_호텔 대실_java
2023. 5. 12. 13:19ㆍAlgorithm/Programmers
728x90
https://school.programmers.co.kr/learn/courses/30/lessons/155651
import java.util.Arrays;
import java.util.Comparator;
import java.util.PriorityQueue;
class Solution {
public int solution(String[][] book_time) {
int answer = 0;
// 입장 시간 순으로 정렬
Arrays.sort(book_time, new Comparator<String[]>() {
@Override
public int compare(String[] o1, String[] o2) {
String[] o1Time = o1[0].split(":");
String[] o2Time = o2[0].split(":");
// res = 양수 : 오름차순
int res = (Integer.parseInt(o1Time[0]) * 60) - (Integer.parseInt(o2Time[0]) * 60)
+ (Integer.parseInt(o1Time[1]) - Integer.parseInt(o2Time[1]));
return res;
}
});
answer = countRoom(book_time);
return answer;
}
// 필요 최소 객실 수 구하기
public int countRoom(String[][] book_time){
int cnt = 0;
// 퇴실 시간 순 우선순위큐
PriorityQueue<String[]> pq = new PriorityQueue<>(new Comparator<String[]>() {
@Override
public int compare(String[] o1, String[] o2) {
String[] o1Time = o1[1].split(":");
String[] o2Time = o2[1].split(":");
// res = 양수 : 오름차순
int res = (Integer.parseInt(o1Time[0]) * 60) - (Integer.parseInt(o2Time[0]) * 60)
+ (Integer.parseInt(o1Time[1]) - Integer.parseInt(o2Time[1]));
return res;
}
});
// 입실시간 순으로 정렬된 book_time 순회
for (String[] book : book_time){
if (pq.isEmpty()){
cnt++;
}
else if(timeCompare(pq.peek(), book) <= 0){ // 기존 방 입실 가능
pq.poll();
}else { // 기존 방 입실 불가능
cnt++;
}
pq.offer(book); // 방 입실
}
return cnt;
}
// 기존 방 입장 가능 여부 판단 함수
public int timeCompare(String[] t1, String[] t2){
String[] t1Time = t1[1].split(":"); // 기존 퇴실 시간
String[] t2Time = t2[0].split(":"); // 신규 입실 시간
// res = 양수 : 오름차순
int res = (Integer.parseInt(t1Time[0]) * 60) - (Integer.parseInt(t2Time[0]) * 60)
+ (Integer.parseInt(t1Time[1]) + 10 - Integer.parseInt(t2Time[1]));
return res;
}
}
'Algorithm > Programmers' 카테고리의 다른 글
programmers_문자열 압축_java (0) | 2023.05.15 |
---|---|
programmers_마법의 엘리베이터_java (0) | 2023.05.14 |
programmers_멀쩡한 사각형_java (0) | 2023.05.12 |
programmers_점 찍기_java (0) | 2023.05.11 |
programmers_거리두기 확인하기_java (0) | 2023.05.11 |