본문 바로가기

Programmers/Level3

[1차] 추석 트래픽

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
import java.util.*;
class Solution {
    public static double timeToDouble(String time) {
        String[] arr = time.split(":");
        return Double.parseDouble(arr[0]) * 60 * 60 + Double.parseDouble(arr[1]) * 60 + Double.parseDouble(arr[2]);
    }
    
    public int solution(String[] lines) {
        int answer = 1;
        double[] startTime = new double[lines.length];
        double[] responseTime = new double[lines.length];
        int maxLen = 0;
 
        // 시작시간 구하기
        for (int i = 0; i < lines.length; i++) {
            String[] line = lines[i].split(" ");
            responseTime[i] = timeToDouble(line[1]);
            double processTime = Double.parseDouble(line[2].split("s")[0]);
            // 소수 셋째자리까지만 저장
            startTime[i] = Math.floor((responseTime[i] - processTime) * 1000/ 1000;
            int secondLen = Double.toString(startTime[i]).length() - Double.toString(startTime[i]).indexOf("."- 1;
            if (secondLen > maxLen)
                maxLen = secondLen;
        }
        
        // 시작 시간 오름차순 정렬
        Arrays.sort(startTime);
 
        // 추가시간 계산
        double addTime = 1;
        for (int i = 0; i < maxLen; i++)
            addTime /= 10;
        for (int i = 0; i < startTime.length; i++) {
            // 소수 셋째자리까지만 저장
            startTime[i] = Math.floor((startTime[i] + addTime) * 1000/ 1000;
        }
 
        // 최대 구간 구하기
        for (int i = 0; i < startTime.length - 1; i++) {
            double endTime = Math.floor((responseTime[i] + 1* 1000 - 1/ 1000;
            int cnt = 1;
            for (int j = i + 1; j < startTime.length; j++) {
                if (startTime[j] <= endTime)
                    cnt++;
                else
                    break;
            }
            if (cnt > answer)
                answer = cnt;
        }
        return answer;
    }
}
cs

시간을 double형으로 변환하여 계산하였다.

시작 시간이 끝나는 시간보다 이전일 경우 카운트 하고 최대 카운트 값을 저장한다.

'Programmers > Level3' 카테고리의 다른 글

거스름돈  (0) 2021.09.14
풍선 터트리기  (0) 2021.09.13
길 찾기 게임  (0) 2021.09.07
자물쇠와 열쇠  (0) 2021.08.26
징검다리 건너기  (0) 2021.08.26