import java.util.*;
class Solution {
public int[] solution(int[] progresses, int[] speeds) {
List<Integer> answer = new ArrayList<>();
Queue<Integer> deployDays = new ArrayDeque<>();
for (int i = 0; i < progresses.length; i++) {
int day = (int)Math.ceil((100 - progresses[i]) / (double)speeds[i]); //소요 일수 계산.
if (deployDays.isEmpty()) {
deployDays.add(day);
continue;
}
if (deployDays.element() >= day) {
deployDays.add(day);
}
else {
answer.add(deployDays.size());
deployDays.clear();
deployDays.add(day);
}
}
if (!deployDays.isEmpty()) {
answer.add(deployDays.size());
}
return answer.stream()
.mapToInt(Integer::intValue)
.toArray();
}
}
주의할 점은 작업들 간의 순서가 존재하여 앞 작업이 완료되지 않아 배포되지 않으면
뒤 작업들은 대기했다가 앞 작업이 배포될 때 같이 배포되어야 한다.
시간 복잡도 계산
작업의 개수는 최대 100개로 O(N)으로 풀었기 때문에 특별히 고려할 사항 없었다.
문제 풀이
먼저 작업 별로 언제 완료되는지 계산해서 deployDays 큐에 넣어주었다.
넣어줄 때 현재 큐에 맨 앞에 있는 작업보다 완료될 날짜가 앞이라면 그냥 넣어주고
만약 완료될 날짜가 뒤라면 전부 배포 처리하고 넣어주었다.
예외 사항
기타 특이사항 없음.