< 문제 >
풀이
- 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포됩니다.
라는 문구를 보고 queue방식임을 캐치할 수 있음.
progresses, speeds가 서로 1대 1로 매칭된다는것을 이용
얼마나 반복될지 모르니 while문을 사용해 반복하면서
while문 내부에 for문으로 queue에 각 요소에 speeds를 더해줍니다.
그리고 queue의 첫번째 요소가 100보다 크다면 count를 올려주고, 해당 queue의 역할은 끝났으므로 queue와 그와 매칭되는 speeds를 shift메소드를 이용해 제거해줍니다.
그리고 count가 0보다 클때만 answer에 count를 push해 각 요소가 FIFO로 순서를 지키면서 count를 넣어주도록 한 풀이.
function solution(progresses, speeds) {
let answer = [];
let queue = progresses; // queue로 변수명 변경
while (queue.length > 0) {
let count = 0;
for (let i = 0; i < queue.length; i++) {
// 서로 짝 지어 더함.
queue[i] += speeds[i];
}
// queue가 shift되면서 for문의 길이를 건드리기 때문에 for문과 shift문을 꼭 분리해야함
while (queue[0] >= 100) {
count++;
queue.shift(); // queue의 마지막 요소 제거.
speeds.shift(); // speeds의 마지막 요소 제거. 항상 짝지어진 speeds도 함께 제거해야함
}
if (count > 0) {
answer.push(count);
}
}
return answer;
}
console.log(solution([93, 30, 55], [1, 30, 5]));
console.log(solution([95, 90, 99, 99, 80, 99], [1, 1, 1, 1, 1, 1]));