강의로 돌아가기
개천재미소녀개발자

예약시간이 자정을 넘어가지않는다에 유의

시각은 HH:MM 형태로 24시간 표기법을 따르며, "00:00" 부터 "23:59" 까지로 주어집니다.
예약 시각이 자정을 넘어가는 경우는 없습니다.
시작 시각은 항상 종료 시각보다 빠릅니다.

이렇게 되어있는데 이경우 endtime이 23:58일때 추가하면 제코드에서 다음날 00:08로 기록됩니다.
그러면 시간을 비교하는 로직이기에 다음값중 00:08이전에 입실해야하는 타겟이 있을경우 해당 타임에 들어가는 경우가 있고 이걸 예외처리해줘야합니다.
저같은경우는 endtime(청소시간까지 끝난 시간)이 만약 다음날을 넘어갈경우 다음손님을 받지않는다로 가정하고 10분을 추가하지않은채로 큐에 삽입했습니다.

// 자정을 넘어가는 경우 확인
if (newTime.isBefore(time)) {
return endtime;
}

작성중인 코드―Solution.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import java.util.*;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.time.DateTimeException;

class Solution {
    public int solution(String[][] book_time) {
        Arrays.sort(book_time
                    , Comparator.comparing((String[] interval) -> interval[0]));

        int index = 0;
        LinkedList<String> room = new LinkedList<>();

        for(String[] time:book_time){
            boolean isRoomAssigned = false;

            for(int i=0; i<room.size(); i++){
                if(room.get(i).compareTo(time[0])<=0){
                    room.set(i,endtimeplusten(time[1]));
                    isRoomAssigned = true;
                    break;
                }
            }

            if(!isRoomAssigned) room.add(endtimeplusten(time[1]));
        }

        return room.size();
    }


    private String endtimeplusten(String endtime) {
    LocalTime time = LocalTime.parse(endtime, DateTimeFormatter.ofPattern("HH:mm"));
    LocalTime newTime = time.plusMinutes(10);

    // 자정을 넘어가는 경우 확인
    if (newTime.isBefore(time)) {
        return endtime;
    }

    return newTime.format(DateTimeFormatter.ofPattern("HH:mm"));
}
}
0 개의 답변
답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다.