import java.util.*;
class Solution{
public int[] solution(int[] progresses, int[] speeds) {
ArrayList<Integer> a = new ArrayList<>();
Queue<Program> Q = new LinkedList<>();
for(int i=0; i<progresses.length;i++) {
Q.offer(new Program(i,progresses[i]));
}
while(!Q.isEmpty()) {
int cnt = 0;
//맨 앞 진도율이 100 미만이면
while(Q.peek().progress < 100) {
for(Program x : Q) {
x.progress += speeds[x.order];
}
}
//맨 앞 진도율이 100이상 되면, 맨앞이 100이 안넘을때까지 poll, cnt++
while(!Q.isEmpty() && Q.peek().progress >= 100) {
Q.poll();
cnt++;
}
a.add(cnt);
}
int[] answer = new int[a.size()];
for(int i=0; i<a.size();i++) {
answer[i] = a.get(i);
}
return answer;
}
}
class Program{
int order;
int progress;
public Program(int order, int progress) {
this.order = order;
this.progress = progress;
}
}
전부 Queue에 넣은후, 맨 앞의 작업의 진도가 100이 될때까지 모든 작업에 speed를 추가해줬다.
맨앞의 진도가 100이 되는순간, q에서 poll시키고 cnt가 1증가한다.
그 뒤에 작업부터는 peek이 100을넘는다면 poll시키고 cnt를 1증가시킨다.
만약 100을 넘지 못한다면,
while문이 끝나고 cnt = 0 이되고
다시 맨앞의 요소를 100까지 만들기위해 모든 작업에 speed를 증가시킨다.
이 문제를 푸는데 거의 2시간정도 걸린거같다...
계속 nullPointerException과 concurrentmodificationexception때문에 고생했는데,
Queue를 poll하고 peek를 비교할때 더 신중하게 해야겠다.