추석 트래픽 자바스크립트

HyosikPark·2020년 12월 7일
0

알고리즘

목록 보기
58/72
function getSec(time) {
    time = time.split(':');
    return time[0] * 3600000 + time[1] * 60000 + time[2] * 1000;
}

function solution(lines) {
    lines = lines.map(e => e.split(' '));
    let finishTime = lines.map(e => getSec(e[1]));
    let startTime = lines.map((e,i) => finishTime[i] - e[2].replace('s','')*1000 + 1);
    let points = startTime.concat(finishTime).sort((a,b) => a-b);
    let answer = 0;
    for(let i = 0; i < points.length; i++) {
        let cnt = 0;
        for(let j = 0; j < startTime.length; j++) {
            if(points[i] <= finishTime[j] && (points[i] + 999) >= startTime[j]) cnt++;
        }
        if(answer < cnt) answer = cnt;
    }
    return answer;
}

1초를 나눠주는 구간을 잡는 것이 핵심.
각 처리시간의 시작시간과 완료 시간을 기점으로 1초간 체크하여 그사이에 처리되고있는 자료들의 개수를 구한다.

먼저 시작시간과 완료시간을 구하기 위해 밀리초 단위로 환산한다.
초 단위로 환산할 경우 0.999초를 더해주는 과정에서 정확한 계산이 나오지 않는 경우가 발생한다.
ex) 0 + 0.999 = 0.9988888888886 이 예시가 실제 예시는 아니고 이러한 경우처럼 정확한 계산이 안되는 상황이 있어 테스트 케이스를 실패하게 된다.

시작시간과 완료시간을 배열로 따로 만들어 준 뒤 두 배열을 concat하여 오름차순으로 정렬하면 기점들이 배열에 담기게 된다.

이 기점들을 기준으로 1초간 처리되는 자료의 개수 최대값을 반환한다.

0개의 댓글