티스토리 뷰

반응형

https://programmers.co.kr/learn/courses/30/lessons/17676?language=java 

 

코딩테스트 연습 - [1차] 추석 트래픽

입력: [ "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-1

programmers.co.kr

import java.util.*;
class Solution {
    public int solution(String[] lines) {
        Log log = new Log(lines);
        return log.convertStrToInt().calculateMaxValue();
    }
    public static class Log {
        
        private final String[] lines;
        private final double[] start;
        private final double[] end;
        private final int len;
        public Log(String[] lines){
            this.lines = lines;
            len = lines.length;
            start = new double[len];
            end = new double[len];
        }
        
        public int calculateMaxValue() {
            int answer = 0;
            for(int i=0;i<len;i++) {
                answer = Math.max(
                    answer,Math.max(throughput(start[i],start[i]+1),throughput(end[i],end[i]+1))
                );
            }
                
            return answer;
        }
        
        private int throughput(double s, double e) {
            int cnt = 0;
            for(int i=0;i<len;i++) {
                if (start[i]<e && end[i]>=s) {
                    cnt++;
                }
            }
            return cnt;
            
        }
        
        public Log convertStrToInt() {
            int i = 0;
            for(String line : lines){
                String[] values = line.split(" ");
                double seconds = convertTimeToSec(values[1]);
                double size = Double.parseDouble(values[2].substring(0,values[2].length()-1));
                double go = seconds - size + 0.001;
                double finish = seconds;
                start[i] = go;
                end[i] = finish;
                i++;
            }
            return this;
            
        }
        
        private double convertTimeToSec(String time) {
            String[] hhmmss = time.split(":");
            double answer = 0.0;
            int add = 3600;
            for(String t : hhmmss) {
                answer += Double.parseDouble(t)*add;
                add/=60;
            }
            return answer;
        }
    }
}

 

convertStrToInt

문자열을 double형으로 변환하고 start와 end에 넣어주는 역할을 한다.

convertTimeToSec

시간에 대한 변환 작업을 여기서 한다.

 

throughput

특정 구간에 대해서 겹치는 로그 수를 카운팅하여 반환한다.

 

calculateMaxValue

특정 구간 값을 시작 부분과 끝 부분의 1초 값을 더하여 루프를 돌고 그에 대한 최댓값을 반환한다.

 

반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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
글 보관함