출처 : [프로그래머스] 기능개발 - JAVA
위의 답변을 참고하여 알고리즘 공부를 했다.
각 기능은 정해진 순서대로만 배포가 가능하다. 앞서 진행한 작업이 완료되지 않는다면 배포를 할 수 없다.
for 반복문이 progresses 배열의 길이만큼 반복 동작하며 작업에 소요되는 기간을 구한다.
큐는 입력 순서대로 반환하므로, 큐에 해당 작업 기간을 넣어준다.
큐가 공백인지를 while문을 통해 검증하고 , queue.poil()
을 사용하여 날짜를 day
에 넣어준다.
현재 기능의 작업이 끝나는 일자를 꺼내온 뒤 구현이 완료된 기능을 큐에서 제거해준다.
import java.util.*;
public class Solution {
public int[] solution(int[] progresses, int[] speeds) {
Queue<Integer> queue = new LinkedList<>();
for (int i = 0; i < progresses.length; i++)
queue.add((int) (Math.ceil((100.0 - progresses[i]) / speeds[i])));
List<Integer> ans = new ArrayList<>();
while (!queue.isEmpty()) {
int day = queue.poll();
int cnt = 1;
while (!queue.isEmpty() && day >= queue.peek()) {
cnt++;
queue.poll();
}
ans.add(cnt);
}
return ans.stream().mapToInt(Integer::intValue).toArray();
}
}