[문제]
https://school.programmers.co.kr/learn/courses/30/lessons/17676
[풀이]
처리시간이 SS.sss 형태이므로 1000을 곱해 ms 단위로 계산한다.
1초 동안의 처리된 요청을 카운트해야 하는데 처리량이 변하는 경우는 새로운 트래픽이 시작하거나 끝나는 경우이다.
따라서 각 요청에 대해서 트래픽이 시작한 지점을 기준으로 1초, 끝난 지점을 기준으로 1초 요청량을 카운트한 뒤 최대 처리량을 반환하도록 했다.
[코드]
import java.util.*;
class Solution {
List<Traffic> list = new ArrayList<>();
public int solution(String[] lines) {
int answer = 0;
for(int i=0; i<lines.length; i++){
String line = lines[i];
String[] arr = line.split(" ");
String s = arr[1];
String st = arr[2].substring(0, arr[2].length()-1);
double dt = Double.parseDouble(st) * (double)1000;
int t = (int)dt;
int cs = convertToMsec(arr[1]);
list.add(new Traffic(cs-t+1, cs));
}
int scnt, ecnt;
//시작점, 끝점으로부터 1초 카운트
for(int i=0; i<list.size(); i++){
scnt = 1;
ecnt = 1;
for(int j=i+1; j<list.size(); j++){
if(list.get(i).s+1000 > list.get(j).s){
scnt++;
}
if(list.get(i).e+1000 > list.get(j).s){
ecnt++;
}
}
answer = Math.max(Math.max(scnt, ecnt), answer);
}
return answer;
}
static class Traffic{
int s, e;
Traffic(int s, int e){
this.s = s;
this.e = e;
}
}
static int convertToMsec(String s){
String[] str = s.split(":");
int hour = Integer.parseInt(str[0]);
int min = Integer.parseInt(str[1]);
double dmsec = Double.parseDouble(str[2]) * (double)1000;
int msec = (int)dmsec;
return hour*60*60*1000 + min*60*1000 + msec;
}
}
'알고리즘 공부 및 문제 풀이 > 프로그래머스(PRO)' 카테고리의 다른 글
[pro] 프로그래머스 level3 12979 기지국 설치 (Java) - 그리디 (0) | 2023.01.26 |
---|---|
[pro] 프로그래머스 level3 12927 야근 지수 (Java) - 우선순위 큐 (0) | 2023.01.26 |
[pro] 프로그래머스 level3 17678 셔틀버스 (Java) - 우선순위 큐 (0) | 2023.01.25 |
[pro] 프로그래머스 level3 42893 매칭 점수 (Java) - 문자열, 정규식 (0) | 2023.01.25 |
[pro] 프로그래머스 level3 60063 블록 이동하기 (Java) - BFS, 시뮬레이션 (0) | 2023.01.20 |