[2018 KAKAO BLIND RECRUITMENT] 추석 트래픽

Titu·2021년 11월 22일
0

Algorithm

목록 보기
16/28

2018 KAKAO BLIND RECRUITMENT 추석 트래픽

유형

  • 슬라이딩 윈도우

코드

class Solution {
    class Log {
        long start;
        long end;

        public Log(long start, long end) {
            this.start = start;
            this.end = end;
        }
    }
    
    public int solution(String[] lines) {
       // 초당 최대 처리량은 요청의 응답 완료 여부에 관계없이 임의 시간부터 1초(=1,000밀리초)간 처리하는 요청의 최대
        Log[] logs = new Log[lines.length];
        int logNum = lines.length;

        // 1. 응답 완료 시간과 응답 전송 시간을 밀리세컨으로 변환해 저장
        // 응답완료시간 + 0.001 - 처리시간 = 응답전송시간
        for(int i = 0; i < logNum; i++) {
            String[] temp = lines[i].split(" ");
            long endTime = timeToMilisec(temp[1]);
            long processingTime = (long)(Float.parseFloat(temp[2].substring(0, temp[2].length() - 1)) * 1000);
            long startTime = endTime + 1 - processingTime;

            logs[i] = new Log(startTime, endTime);
        }

        // 2. 로그 끝 점만 포인트로 비교
        int max = 0;
        for(int i = 0; i < logNum; i++) {
            long startTime = logs[i].end;
            long endTime = startTime + 1000;
            int cnt = 0;
            for(int j = 0; j < logNum; j++) {
                if(logs[j].start >= endTime || logs[j].end < startTime) {
                    continue;
                }
                cnt++;
            }
            if(cnt > max) {
                max = cnt;
            }
        }

        return max;
    }
    
     long timeToMilisec(String time) {
        String[] temp = time.split("\\.");
        long milisec = Long.parseLong(temp[1]);

        temp = temp[0].split(":");
        long hour = Long.parseLong(temp[0]);
        long min = Long.parseLong(temp[1]);
        long sec = Long.parseLong(temp[2]);

        milisec += (hour * 60 * 60 + min * 60 + sec) * 1000;

        return milisec;
    }
}
profile
This is titu

0개의 댓글