강의로 돌아가기
쭌

테스트 케이스 공유 합니다.

[["11:01", "17:27"], ["04:10", "04:20"], ["07:59", "08:59"], ["09:10", "10:49"]] >>> 1
[["11:01", "17:27"], ["04:10", "04:20"], ["07:59", "08:59"], ["09:10", "10:49"], ["11:01", "17:27"], ["04:10", "04:20"], ["07:59", "08:59"], ["09:10", "10:49"]] >>> 2
[["09:10", "10:11"], ["10:20", "12:20"]] >>>2
[["09:10", "10:10"], ["09:10", "10:10"], ["10:20", "12:20"], ["10:20", "12:20"]] >>> 2
[["08:00", "08:30"], ["08:00", "13:00"], ["12:30", "13:30"]] >>> 2
[["00:01", "00:10"], ["00:19", "00:29"]] >>> 2
[["05:57", "06:02"], ["04:00", "06:59"], ["03:56", "07:57"], ["06:12", "08:55"], ["07:09", "07:11"]] >>> 3
[["00:01", "00:10"], ["00:19", "00:29"]] >>> 2
[["08:00", "08:30"], ["08:00", "13:00"], ["12:30", "13:30"]] >>> 2
[["16:00", "16:10"], ["16:20", "16:30"], ["16:40", "16:50"]] >>> 1
[["09:10", "10:10"], ["10:20", "12:20"], ["12:30", "13:20"]] >>> 1
[["10:00", "10:10"]] >>> 1

틀렸던 점
1) 1분단위로 하지 않고 10분단위로 계산하여 실패
11:59 ~ 12:01 >> 11:50 ~ 12:10 으로 계산하여 실패.
2) if문 오류 시작시간과 종료시간이 같을 때.
if(i >= startHour) {
if(j >= startMinute) {
//처리
}
}
와 같이 조건을 작성하여 i = startHour = endHour일때 잘못된 조건식에 걸려서 잘못된 처리를 함.

작성중인 코드―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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
import java.util.*;
import java.util.stream.*;

class Solution {
    public int solution(String[][] book_time) {


        Map<Integer, Integer> roomCount = new HashMap<>();
        for(String[] time : book_time) {
            String[] startArr = time[0].split(":");
            String[] endArr = time[1].split(":");
            int startHour = Integer.parseInt(startArr[0]);
            int startMinute = Integer.parseInt(startArr[1]);
            int endHour = Integer.parseInt(endArr[0]);
            int endMinute;
            int tmpEndMinute = Integer.parseInt(endArr[1]) + 10;

            if(tmpEndMinute >= 60) { //청소시간 더해주고 분에서 시간으로 자릿수 올림.
                endHour += 1;
                endMinute = tmpEndMinute - 60;
            } else {
                endMinute = tmpEndMinute;
            }

            // System.out.println("oringin : " + Arrays.toString(time)
            //                    + " / startHour : " + startHour
            //                    + " / startMinute : " + startMinute
            //                    + " / endHour : " + endHour
            //                    + " / endMinute : " + endMinute
            //                   );

            for(int i = startHour; i < 24; i ++) {
               if(i > endHour) {
                   break;
               } 
               for(int j = 0; j < 60; j ++) {
                   int key = 100*i + j;

                    // System.out.println("oringin : " + Arrays.toString(time)
                    //            + " / key : " + key        
                    //            + " / startHour : " + startHour
                    //            + " / startMinute : " + startMinute
                    //            + " / endHour : " + endHour
                    //            + " / endMinute : " + endMinute
                    //           );
                   if ((startHour * 100 + startMinute) <= key 
                      && key < (endHour * 100 + endMinute)) {
                        plus(roomCount, key);
                   }



                   // if(i == startHour) {
                   //     if (j >= startMinute) {
                   //         plus(roomCount, key);
                   //     }
                   // } else if (i == endHour) {
                   //     if (j < endMinute) {
                   //         plus(roomCount, key);
                   //     }
                   // } else {
                   //     plus(roomCount, key);
                   // }

               }
            }
        }

        List<Integer> values = new ArrayList<>(roomCount.values());
        values.sort(Collections.reverseOrder());

//         roomCount.entrySet().forEach(entry -> {
//             System.out.println("key :" + entry.getKey() + " / value : " + entry.getValue());  
//         });

        return values.get(0);
    }

    private static void plus(Map<Integer, Integer> map, int key) {
        if(map.containsKey(key)) {
            map.put(key, map.get(key) + 1);
        } else {
            map.put(key, 1);
        }
    }


}

0 개의 답변
답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다. 마크다운 가이드 를 참고하세요.