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형으로 변환하여 계산하였다.
시작 시간이 끝나는 시간보다 이전일 경우 카운트 하고 최대 카운트 값을 저장한다.