import java.util.*;
class Solution {
public ArrayList<Integer> solution(int[] progresses, int[] speeds) {
Stack<Integer> stack = new Stack<>();
ArrayList<Integer> answer = new ArrayList<>();
int idxMax = progresses.length - 1; // 스택에 배열을 맨 뒤부터 담기 위함
// progresses를 stack에 담기
for(int i = idxMax; i >= 0 ; i--) {
stack.push(progresses[i]);
}
int maxDays = 0; // 가장 긴 일수
for(int i = 0; i < progresses.length; i++) {
// (int) -> Math.ceil의 반환값이 double이라서, (double) -> 소숫점까지 정확히 필요함
// (double) 안 하면 테스트 케이스 6 실패...
maxDays = Math.max(maxDays, (int)Math.ceil((double)(100 - progresses[i]) / speeds[i]));
}
for(int i = 0; i < maxDays; i++) {
int count = 0; // answer에 저장할 return 값, 배포는 하루에 한 번만 가능하기 때문
for(int j = stack.size() - 1; j >= 0; j--) {
// set(인덱스, 값) -> stack 인덱스에 해당되는 값을 변경해줌
stack.set(j, stack.elementAt(j)+speeds[idxMax-j]);
if(stack.peek() >= 100) { // peek(맨 위에 있는 값 확인)해서 100% 이상 달성되면
count++; // 카운트 올려주고
stack.pop(); // pop()으로 stack의 맨 위의 요소 제거
}
}
if(count > 0) { // 카운트 되었다면
answer.add(count); // answer에 저장
}
}
return answer;
}
}