[프로그래머스] [1차] 추석 트래픽::알고리즘
2020. 6. 17. 14:24ㆍalgorithm/count
순서대로 입력되는 시간 값을 보고 언제 가장 많이 겹치는지 계산하는 문제
1초 간격으로 계산하기 때문에 처음 입력 시간을 받을 때,
처음 비교 시간 -1초, 나중 비교 시간 +1초를 해주고, count 해주었습니다.
배열의 크기는 트래픽 도착 시간이 순차적으로 들어오기 때문에
(가장 나중에 들어온 시간 + 1) - (가장 먼저 들어온 시간 - T의 최댓값 - 1)으로 계산했습니다.
ex)
lines = {
"2016-09-15 01:00:04.001 2.0s",
"2016-09-15 01:00:07.000 2s"
}
일 때,
"2016-09-15 01:00:04.001 2.0s"는
2016-09-15 01:00:04.001 - 2.0s - 1s = 2016-09-15 01:00:01.002부터
2016-09-15 01:00:04.001 + 1s = 2016-09-15 01:00:05.001까지의
사이 시간 모두 count + 1
"2016-09-15 01:00:07.000 2s"
2016-09-15 01:00:07.000 - 2s - 1s = 2016-09-15 01:00:04.001부터
2016-09-15 01:00:07.000 + 1s = 2016-09-15 01:00:08.000까지의
사이 시간 모두 count + 1
Java 코드
public class Solution_추석트래픽 {
public static int datetime(String[] date, String[] time, int idx) {
return 24 * 60 * 60 * 1000 * Integer.parseInt(date[idx].substring(8)) +
60 * 60 * 1000 * Integer.parseInt(time[idx].substring(0, 2)) +
60 * 1000 * Integer.parseInt(time[idx].substring(3, 5)) +
(int) (1000 * Double.parseDouble(time[idx].substring(6, 12)));
}
public static int solution(String[] lines) {
int answer = 0;
int size = lines.length;
String[] date = new String[size];
String[] time = new String[size];
int[] term = new int[size];
for (int i = 0; i < size; ++i) {
date[i] = lines[i].substring(0, 10);
time[i] = lines[i].substring(11, 23);
term[i] = (int) (Double.parseDouble(lines[i].substring(24, lines[i].length()-1)) * 1000);
}
int first = datetime(date, time, 0) - 3000 - 1000;
int[] array = new int[datetime(date, time, size - 1) - first + 3000 + 1000];
for (int i = 0; i < size; ++i) {
int d = datetime(date, time, i) - 1000;
for (int j = d - term[i] - first + 1; j < d - first + 1000; ++j)
answer = answer < ++array[j] ? array[j] : answer;
}
return answer;
}
public static void main(String[] args) {
System.out.println(solution(new String[] {
"2016-09-15 01:00:04.001 2.0s",
"2016-09-15 01:00:07.000 2s"
}));
System.out.println(solution(new String[] {
"2016-09-15 01:00:04.002 2.0s",
"2016-09-15 01:00:07.000 2s"
}));
System.out.println(solution(new String[] {
"2016-09-15 20:59:57.421 0.351s",
"2016-09-15 20:59:58.233 1.181s",
"2016-09-15 20:59:58.299 0.8s",
"2016-09-15 20:59:58.688 1.041s",
"2016-09-15 20:59:59.591 1.412s",
"2016-09-15 21:00:00.464 1.466s",
"2016-09-15 21:00:00.741 1.581s",
"2016-09-15 21:00:00.748 2.31s",
"2016-09-15 21:00:00.966 0.381s",
"2016-09-15 21:00:02.066 2.62s"
}));
}
}