반응형
문제
https://school.programmers.co.kr/learn/courses/30/lessons/42586?language=javascript
풀이
1. 큐에 각 작업이 걸리는 시간을 저장한다.
2. 큐를 돌면서 최댓값보다 작거나 같으면 cnt를 증가시키고, 아니면 answer에 같이 배포할 날짜를 넣어주고 maxVal를 갱신한다.
언뜻 보면 간단한 거 같지만 헷갈리는 부분들이 있었다.
먼저, 큐의 첫 번째 값은 미리 cnt를 세고 시작한다. 이를 위해 maxVal를 queue[0]으로 초기화하고 큐의 순회도 i=1부터 시작한다.
다음으로 큐의 마지막까지 배포하기 위해 큐를 모두 돌고 나서 answer.push(cnt)를 한 번 더 해준다.
예를 들어, 첫 번째 예제처럼 queue(걸리는 날짜)가 [7, 3, 9]인 경우를 살펴보자. 마지막 9에서 else문으로 가서 answer.push(2)를 하고, maxVal = 9, cnt = 1로 할당한 뒤 끝나버린다. 이때 마지막 9까지 포함시키기 위해 answer.push(cnt)를 한 번 더 해준다.
function solution(progresses, speeds) {
// 각각 걸리는 시간을 저장하고, queue에 저장.
// 이전 날짜보다 더 적게 걸린 경우 배포 cnt+1, 아니면 answer에 넣고, maxVal 갱신
const queue = progresses.map((prog, i) => Math.ceil((100 - progresses[i]) / speeds[i]))
let maxVal = queue[0]
let cnt = 1
const answer = []
for (let i=1;i<queue.length;i++) {
if (queue[i] <= maxVal) {
cnt += 1
} else {
answer.push(cnt)
maxVal = queue[i]
cnt = 1
}
}
answer.push(cnt)
return answer
}
스택/큐는 기반을 다지는 느낌인데 벌써부터 헷갈려서 어떡하나 싶다.. 꾸준히 해야지..!
반응형
'Algorithm > Programmers' 카테고리의 다른 글
[알고리즘/프로그래머스/고득점Kit] 해시(JS)브라운 먹고싶다/..(폰켓몬, 완주하지 못한 선수, 의상, 전화번호 목록, 베스트 앨범) (0) | 2023.09.13 |
---|---|
[알고리즘/프로그래머스/고득점 Kit] 프로세스(JS) (0) | 2023.09.09 |
[알고리즘/프로그래머스/고득점 Kit] 올바른 괄호(JS) (0) | 2023.09.09 |
[알고리즘/프로그래머스/카카오] 메뉴 리뉴얼(JS) (0) | 2023.08.31 |
[알고리즘/프로그래머스/카카오] 두 큐 합 같게 만들기(JS, 투포인터) (0) | 2023.08.30 |