알고리즘/다시 풀어 보기
프로그래머스 [Lv. 3] [1차] 추석 트래픽 {언어 : JavaScript} [다시 풀어 보기]
스위태니
2024. 8. 26. 16:20
728x90
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/17676
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
정답 코드
function solution(lines) {
let maxThroughputPerSeconds = 0;
const newLines = lines.map((line) => {
const [date, time, duration] = line.split(" ");
const [hh, mm, ssss] = time.split(":");
const [ss, sss] = ssss.split(".");
const endTime = (parseInt(hh) * 3600 + parseInt(mm) * 60 + parseInt(ss)) * 1000 + parseInt(sss);
const throughput = parseFloat(duration.slice(0, -1)) * 1000;
const startTime = endTime - throughput + 1; // 시작 시간은 종료 시간에서 처리 시간을 뺀 것
return [startTime, endTime];
});
const n = newLines.length;
for (let idx = 0; idx < n; idx++) {
let cnt = 0;
const [_, endTime] = newLines[idx];
const windowEnd = endTime + 1000;
for (let jdx = 0; jdx < n; jdx++) {
const [startTime, _] = newLines[jdx];
if (startTime < windowEnd && newLines[jdx][1] >= endTime) {
cnt += 1;
}
}
maxThroughputPerSeconds = Math.max(maxThroughputPerSeconds, cnt);
}
return maxThroughputPerSeconds;
}
풀이 방법
- 시간 파싱 및 변환:
- 로그 문자열을 분해하여, 시각을 밀리초 단위로 변환한다. 종료 시각과 시작 시각을 각각 계산한다.
- 윈도우 내 요청 수 계산:
- 각 로그의 종료 시각을 기준으로 1초의 윈도우를 설정한다.
- 이 윈도우 내에 포함되는 모든 요청(해당 요청의 시작 시각과 종료 시각이 윈도우 내에 있는지 확인)을 카운트한다.
- 최대 처리량 비교:
- 모든 로그에 대해 윈도우 내의 요청 수를 비교하고, 그중 최대 값을 저장한다.
- 결과 반환:
- 최대 처리량을 반환하면 끝!
느낀점
- 그리디는 여전히 어렵다.
728x90