반응형
파싱을 요하는 시뮬레이션 문제이다.
이 문제에서 요점은 입력으로 들어오는 시간을 밀리초(ms) 로 변환시키는 것과 트래픽의 변화가 생기는 것은 시작점과 끝점이라는 것을 파악하는 것이다. 모든 밀리초 시간을 확인할수 없으므로 시작점과 끝점의 1초를 확인하는 방식으로 푼다면 O(n*n) 시간안에 해결할 수 있는 문제이다.
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
|
package programmers;
import java.util.List;
import java.util.StringTokenizer;
public class Solution_2018카카오_추석트래픽 {
static class Pos{
long start,end;
Pos(long s, long e){
start=s;end=e;
}
}
public static void main(String[] args) {
String[] lines = {"2016-09-15 01:00:04.002 2.0s",
"2016-09-15 01:00:07.000 2s"};
// String[] lines = {"2016-09-15 01:00:04.001 2.0s",
// "2016-09-15 01:00:07.000 2s"};
System.out.println(solution(lines));
}
static int solution(String[] lines) {
int total= lines.length;
Pos[] arr=new Pos[total];
int result=Integer.MIN_VALUE;
for(int i=0;i<total;i++) {
StringTokenizer st = new StringTokenizer(lines[i]);
st.nextToken(); //날짜날리기
long finishTime=0;
StringTokenizer st2= new StringTokenizer(st.nextToken(),":.");
finishTime+= Long.parseLong(st2.nextToken()) * 1000 * 60 * 60; //시
finishTime+= Long.parseLong(st2.nextToken()) * 1000 * 60; //분
finishTime+= Long.parseLong(st2.nextToken()) * 1000; //초
finishTime+= Long.parseLong(st2.nextToken()); //밀리초
st2= new StringTokenizer(st.nextToken().replace("s", ""),".");
long timeTakes = Long.parseLong(st2.nextToken())*1000;
if(st2.hasMoreTokens()) {
String temp=st2.nextToken();
if(temp.length()==3) {
timeTakes+=Long.parseLong(temp);
}else if(temp.length()==2) {
timeTakes+=Long.parseLong(temp)*10;
}else if(temp.length()==1) {
timeTakes+=Long.parseLong(temp)*100;
}
}
arr[i]=new Pos((long)(finishTime-timeTakes+1), finishTime);
}
for(int i=0;i<total;i++) {
Pos cur=arr[i];
int ans1=0; int ans2=0;
for(int j=0;j<total;j++) {
Pos next = arr[j];
//start 뒤 1초
if(cur.start<=next.end && cur.start+999 >=next.start)
ans1++;
//end 뒤 1초
if(cur.end<=next.end && cur.end+999 >=next.start)
ans2++;
}
result=Math.max(ans1, result);
result=Math.max(ans2, result);
}
return result;
}
}
|
반응형
'Algorithm' 카테고리의 다른 글
[BOJ] 2644. 촌수계산 (0) | 2020.08.11 |
---|---|
[BOJ] 1931. 회의실배정 (0) | 2020.08.08 |
[Programmers] 실패율 (0) | 2020.08.03 |
[Programmers] 입국심사 (0) | 2020.07.30 |
[Programmers] 스킬트리 (0) | 2020.07.30 |