문제 이름 : [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초로 해주어야 함) 배열에 넣고, 시간 순으로 정렬하여 시작이면 카운트를 올리고 끝이면 카운트를 내리면서 최대 카운트를 찾아내면 됩니다.
도움이 되셨다면 공감 부탁드립니다.