새소식

Programmers

[Programmers] [1차] 추석 트래픽 문제 - (javascript)

  • -
728x90
문제 이름 :  [1차] 추석 트래픽

 

<<< 문제 내용 >>>



 

function solution(lines) {
    let answer = 0;
    const array = [];
    let count = 0;
    
    /* HH:MM:SS.MILI GAP(s) 를 기준으로 값을 받아서
     time을 mili초 단위로 변경시켜서 계산합니다.
     **중요한 것은 end 시간은 1초만큼 더해주어야 
     예제 2번과 같은 경우를해결할 수 있습니다.  */
    const changeTimes = (h, m, s, mili, gap) => {
        const time = ((Number(h)*3600)+(Number(m)*60)+Number(s))*1000+(Number(mili));
        
        array.push([time-(Number(gap)*1000)+1, 'start']);
        array.push([time+1000, 'end']);
    }
    
    for(const line of lines){
        const [_, times, gap] = line.split(' ');
        const [h, m, sLine] = times.split(':');
        const [s, mili] = sLine.split('.');
        
        changeTimes(h, m, s, mili, gap.slice(0, -1));
        
        array.sort((a, b)=> a[0]-b[0]);
    }
    
    for(const temp of array){
        if(temp[1] === 'start'){
            count +=1;
        }else count -=1;
        
        answer = Math.max(answer, count);
    }
    
    
    return answer;
}

* 알고리즘 키워드(Keyword) => 설명란의 막대기처럼 시작과 끝 시간을 mili초를 기준으로 변경하여(끝 시간은 +1초로 해주어야 함) 배열에 넣고, 시간 순으로 정렬하여 시작이면 카운트를 올리고 끝이면 카운트를 내리면서 최대 카운트를 찾아내면 됩니다.

 

 

 

도움이 되셨다면 공감 부탁드립니다.

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.