본문 바로가기

알고리즘 공부 및 문제 풀이/프로그래머스(PRO)

[pro] 프로그래머스 level3 17676 추석 트래픽 (Java)

[문제]

https://school.programmers.co.kr/learn/courses/30/lessons/17676

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

[풀이]

처리시간이 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;
    }
}