예약 시간이 문자열 형태로 담긴 2차원 배열 book_time이 매개변수로 주어질 때, 필요한 최소 객실의 수를 return하는 solution 함수를 작성하는 문제이다.
import java.util.Arrays;
import java.util.PriorityQueue;
class Solution {
public int solution(String[][] book_time) {
int answer = 0;
int[][] ibt = time_string_to_int(book_time);
// 입실 시각과 퇴실 시각이 빠른 것을 기준으로 정렬
Arrays.sort(ibt, (o1, o2) -> {
if (o1[0] > o2[0]) {
return 1;
} else if (o1[0] < o2[0]) {
return -1;
} else {
if (o1[1] > o2[1]) {
return 1;
} else {
return -1;
}
}
});
// 방 배정
PriorityQueue<Integer> room = new PriorityQueue<>();
for (int[] time : ibt) {
if (room.size() > 0) {
if (time[0] >= room.peek()) {
room.poll();
room.add(time[1]);
} else {
room.add(time[1]);
}
} else {
room.add(time[1]);
}
}
answer = room.size();
return answer;
}
private int[][] time_string_to_int(String[][] book_time) {
int[][] ibt = new int[book_time.length][2];
for (int i = 0; i < book_time.length; i++) {
ibt[i][0] = Integer.parseInt(book_time[i][0].replaceAll(":", "")); // 입실 시각
ibt[i][1] = 10 + Integer.parseInt(book_time[i][1].replaceAll(":", "")); // 퇴실 시각
if (ibt[i][1] % 100 >= 60) { // 퇴실 시각 m이 60분을 넘을 경우를 가정
ibt[i][1] = ibt[i][1] + 100 - 60;
}
}
return ibt;
}
}