Algorithm/Programmers
[알고리즘/프로그래머스/고득점Kit] 기능개발(JS)
개발자 김비숑
2023. 9. 9. 19:09
반응형
문제
https://school.programmers.co.kr/learn/courses/30/lessons/42586?language=javascript
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이
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
}
스택/큐는 기반을 다지는 느낌인데 벌써부터 헷갈려서 어떡하나 싶다.. 꾸준히 해야지..!
반응형