문제 설명

제한 사항

입출력 예

문제 풀이
while문으로 모든 작업이 배포될 때 까지 반복, 여기서 while문의 반복 한번은 하루를 의미
- while문 안에서
for문을 사용하여 각 작업 현황 업데이트
- for문을 반복할 때, 작업이 완료된 기능의 경우 바로 배포가 되지 못함, 앞의 작업이 완료 되어야 배포 가능)
- 이미 배포 완료된 작업을 순서대로 기록해야, 현재 작업이 배포 가능한지 확인 가능
Stack을 사용하여 배포 완료한 작업을 기록(지금 생각해보면 그냥 int변수로 마지막에 배포한 작업만 기록해도 되지 않을까 싶음)
- 마지막에 기록한 작업 다음이 자신의 차례이면 배포, 이때 배포 횟수 기록. 여기서 배포 횟수는
while문을 돌 때마다 초기화 됨
- for문을 다 돌고 나서, 배포 횟수가 1번 이상이면 리스트에 기록
코드
import java.util.*;
class Solution {
public int[] solution(int[] progresses, int[] speeds) {
int[] answer = new int[progresses.length];
int idx = 0;
Stack<Integer> st = new Stack<Integer>();
st.push(-1);
while(st.size() <= progresses.length){
int num = 0;
for(int i=0; i<progresses.length; i++){
progresses[i] += speeds[i];
if (st.peek()+1 == i && progresses[i]>=100){
st.push(i);
num++;
}
}
if (num>0) answer[idx++] = num;
}
return Arrays.copyOf(answer, idx);
}
}
결과
