
코드 흐름
- ArrayList<> 를 방의 갯수로 잡고
- String[][] book_time으로 들어오는 book_time[][0] 과 book_time[][1] 이 호텔 예약 시작과 끝시간 이라는것을 알아야 한다.
- Arrays.sort()를 하였을때 String을 비교할 수 있는 compare함수를 Override 해주어야 하고
- String 형태의 예약시간을 1440 까지 분단위로 존재하는 Integer 형태로 바꾸어 주었다. 바꿈과 동시에 10분을 끝시간에 더하여 호텔의 정비시간을 잡았다.
- 이 코드안에서 놓치기 쉬운 두가지 포인트는 Collections.sort로 rooms 의 리스트들을 오름차순으로 정렬하여 가장 오랬동안 쓰이지 않은 방을 먼저 분배하는것과
- 분배되고나서 break 문을 실행하여야 한다는 것이다.
import java.util.*;
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){
if(o1[0].equals(o2[0]))
return o1[1].compareTo(o2[1]);
else
return o1[0].compareTo(o2[0]);
}
});
int[][] time = new int[book_time.length][2];
int i = 0;
ArrayList<Integer> rooms = new ArrayList<>();
for(String[] o : book_time){
Collections.sort(rooms);
String[] start = o[0].split(":");
String[] end = o[1].split(":");
time[i][0] = (Integer.parseInt(start[0])*60)+Integer.parseInt(start[1]);
time[i][1] = (Integer.parseInt(end[0])*60)+Integer.parseInt(end[1])+10;
boolean isAdded = false;
for(int j = 0; j<rooms.size(); j++){
if(rooms.get(j) <= time[i][0]){
rooms.set(j,time[i][1]);
isAdded = true;
break;
}
}
if(!isAdded){
rooms.add(time[i][1]);
}
i++;
}
return rooms.size();
}
}
'Algorithm & Data Structures > Programers' 카테고리의 다른 글
Lv 2. 숫자 카드 나누기 (0) | 2024.08.12 |
---|---|
Lv 2. 메뉴 리뉴얼 (0) | 2024.08.11 |
Lv 2. 시소 짝궁 (0) | 2024.08.08 |
Lv 2. 마법의 엘리베이터 (1) | 2024.08.06 |
Lv 2. 연속된 부분수열의 합 (0) | 2024.08.04 |