문제
이 문제의 핵심은 정렬
과 우선 순위 큐
를 활용하는 것입니다.
먼저 String인 시간을 정렬할 수 있도록 Int로 변환하는 과정이 필요합니다. 이 때, 10분의 청소 시간이 필요하므로 퇴실 시간에 10분을 더해주고 만약, 60분을 넘어간다면 시간 처리를 진행합니다.
그 후, 입실 시간을 기준으로 예약리스트를 정렬하고 하나씩 탐색합니다. 우선 순위 큐가 비어있다면 방을 추가하도록 하고, 비어있지 않다면 peek 값의 퇴실시간과 현재 입실 시간을 비교하여 방 추가 여부를 판단합니다.
최종적으로 큐에 size를 파악해 정답을 도출 할 수 있습니다.
import java.util.*;
class Solution {
public int solution(String[][] book_time) {
int answer = 0;
int[][] bookTime = new int[book_time.length][2];
for (int i = 0; i<book_time.length; i++) {
int start = Integer.parseInt(book_time[i][0].replace(":", ""));
int end = Integer.parseInt(book_time[i][1].replace(":", ""));
end += 10; // 청소 시간
if (end % 100 >= 60) {
end += 40;
}
bookTime[i][0] = start;
bookTime[i][1] = end;
}
Arrays.sort(bookTime, (a1, a2) -> {
return a1[0]-a2[0];
});
PriorityQueue<int[]> pq = new PriorityQueue<>(Comparator.comparingInt(a -> a[1]));
for (int[] book : bookTime) {
if (pq.isEmpty()) {
pq.add(book);
} else {
int[] tmp = pq.peek();
int start = tmp[0];
int end = tmp[1];
if (book[0] >= end) {
pq.poll();
}
pq.add(book);
}
}
answer = pq.size();
return answer;
}
}
✏️ TIP
Arrays.sort(bookTime, (a1, a2) -> {
return a1[0]-a2[0];
});
PriorityQueue<int[]> pq = new PriorityQueue<>(Comparator.comparingInt(a -> a[1]));
피드백 및 개선점은 댓글을 통해 알려주세요😊