각 기능 작업의 진도가 담긴 progresses 배열, 각 기능 작업의 속도가 담긴 speeds 배열을 활용하여, 각 배포마다 몇개의 기능이 배포되는지 배열에 담아 반환하는 함수 구현
- 스택 : 데이터가 담길 때, LIFO(Last-In-First-Out) 즉 후입선출의 특징을 띄는 자료구조이며, 한 쪽 끝에서만 데이터가 들어가고 나올 수 있는 선형구조
- 큐 : 데이터가 담길 때, FIFO(First-In-First-Out) 즉 선입선출의 특징을 띄는 자료구조이며, 한 쪽 끝에서 데이터가 들어와 반대편 끝으로 나오는 선형구조
- 사실 이 문제는 작업이 완료되는 순으로 순차적으로 배포되는 방식이기에 FIFO인 큐 알고리즘으로 풀어야 되지만, 더 간단한 방법이 있어 다르게 풀어보았다
- remainDays라는 각 작업의 배포까지 남은 일 수를 담는 배열 선언
- progresses를 순회하여 각 작업당 남은 개수를 각 작업 속도로 나눠 배포까지 남은 일수를 remainDays에 담기
- remainDays를 순회하여 해당 남은 일수가 만약 초기 설정한 최댓값 이하라면, answer의 해당 배포 텀에 배포 카운트 1 증가
- remainDays를 순회하여 해당 남은 일수가 만약 초기 설정한 최댓값 초과라면, 최댓값이 해당 남은 일수로 변경되고, answer의 배포 텀이 변경되면서 카운트 1하기
- 배포 텀별 배포 기능 수가 담긴 answer 배열을 반환
function solution (progresses, speeds) { let answer = [0], remainDays = [], answerIdx = 0; remainDays = progresses.map((progress, i) => Math.ceil((100-progress)/speeds[i])); let max = remainDays[0]; for (let i = 0; i < remainDays.length; i++) { if (remainDays[i] <= max) { answer[answerIdx]++; } else { max = remainDays[i]; answer[++answerIdx] = 1; } } return answer; }