📖 문제
🧑🏻💻 풀이 과정
1) 문제 접근 및 이해
입력으로 들어온 문자열 형태의 시간 정보를 서로 계산하기 쉽게 하기 위하여 밀리초로 변경하였습니다.
변경된 밀리초를 하나의 객체의 키값으로 저장하였고, 시작시간인 경우 +1 을, 종료 시간인 경우 -1 을 연산하였습니다.
이후 객체의 키들을 오름차순으로 정렬하였고, 키값들을 순환하며 초당 최대 처리량을 구하였습니다.
2) 알고리즘
- 문자열
3) 풀이 코드
사용 언어 - JavaScript
function solution(lines) {
let answer = 0 // 정답
const timeline = {} // 타임라인을 저장할 객체
lines.map(v => v.split(' ')).forEach(v => {
const hour = parseInt(v[1].slice(0, 2)) * 3600000 // 시간을 밀리초로 변경
const minute = parseInt(v[1].slice(3, 5)) * 60000 // 분을 밀리초로 변경
const second = parseFloat(v[1].slice(6)) * 1000 // 초를 밀리초로 변경
let end = hour + minute + second // 종료 시간
const duration = parseFloat(v[2].replace('s', '')) * 1000 // 소요 시간
const start = end - duration + 1 // 시작 시간
end += 1000 // 1초 동안의 처리량을 구해야하므로 종료 시간에 1초를 추가
timeline[start] = timeline[start] === undefined ? 1 : timeline[start] + 1 // 시작 시간을 키값으로 값은 1
timeline[end] = timeline[end] === undefined ? -1 : timeline[end] - 1 // 종료 시간을 키값으로 값은 -1
})
let cnt = 0
Object.keys(timeline).sort((a,b) => a - b).forEach(v => { // 타임라인에 있는 시간들을 오름차순으로 정렬하여 1초동안 처리 가능한 최대 개수 구하기
cnt += timeline[v]
answer = Math.max(answer, cnt)
})
return answer
}
🔗 문제 링크
- https://programmers.co.kr/learn/courses/30/lessons/17676?language=javascript
※ 오류 및 오타, 다른 의견이 있는 경우 댓글을 남겨주시면 감사하겠습니다
'알고리즘 문제풀이 > JavaScript' 카테고리의 다른 글
[프로그래머스] 입국심사 (0) | 2022.05.27 |
---|---|
[프로그래머스] 단어 변환 (0) | 2022.05.13 |
[프로그래머스] 짝지어 제거하기 (0) | 2022.05.09 |
[프로그래머스] 네트워크 (0) | 2022.05.05 |
[프로그래머스] 타겟 넘버 (0) | 2022.05.05 |
댓글