풀이
import java.util.*;
class Solution {
public int[] solution(int[] progresses, int[] speeds) {
ArrayList<Integer> result = new ArrayList<>();
Queue<Integer> queue = new LinkedList<>();
for(int i = 0; i < progresses.length; i++){
if((100 - progresses[i]) % speeds[i] == 0){
queue.add((100 - progresses[i]) / speeds[i]);
} else{
queue.add((100 - progresses[i]) / speeds[i] + 1);
}
}
int num = queue.poll();
int count = 1;
while(!queue.isEmpty()){
if(num >= queue.peek()){
count++;
queue.poll();
}else{
result.add(count);
count = 1;
num = queue.poll();
}
}
result.add(count);
return result.stream().mapToInt(i -> i).toArray();
}
}
- 날짜 결과를 넣을 result 리스트, 큐를 사용.
- (100% - 현재 작업률) / 하루 작업률을 계산해서 큐에 넣어준다.
- 큐에서 수를 뽑고 count를 1로 선언한다.
- 큐가 빌때까지 반복문을 돌리면서, 처음 수와 큐에 처음 수를 비교하여 뽑은 첫 수가 큰 경우, count++를 해주며 큐에서 뽑아 버린다.
- 처음 수와 큐에 처음 수를 비교하여 첫 수가 작은 경우, 그 수가 나가도 뒷 수가 못나오므로, count를 결과리스트에 넣어주고, count를 1로 초기화, 큐에 첫 수를 뽑아 비교하는 수로 지정한다.
- 마지막 결과 리스트에 count를 넣어주고 배열로 변환하여 반환.