큐로 사부작사부작..해보다가 내 풀이 방식은 큐가 필요 없기도 하고 큐로 풀 수가 없어서 단순 배열로 풀었다.
작업량 더하고-> 배포 가능 상태인지 검사하고 -> ...를 마지막 순서 작업을 배포할 때 까지 반복하는 게 핵심이었다.
다 풀고 나서 생각해보니까 ArrayList는 원소를 삭제할 경우 알아서 빈자리를 땡겨주기 때문에 걍 ArrayList에서 배포 가능한 원소를 삭제해가며 진행했어도 괜찮았을 것 같다. 그럼 굳이 변수 idx를 사용하지 않아도 괜찮았겠지...?
import java.util.*;
class Solution {
public int[] solution(int[] progresses, int[] speeds) {
ArrayList<Integer> answer = new ArrayList<>(); //답의 개수를 모르니까 ArrayList로 선언
int[] answer2; //최종 리턴할 answer 리턴 타입
int idx = 0; //가장 앞에 있는 기능의 인덱스
do {
for(int i=0;i<progresses.length;i++){
progresses[i] += speeds[i]; //각 기능에 개발속도 더하기
}
int cnt = 0; //배포 가능한 기능의 개수
while(progresses[idx] >= 100){
cnt++; //배포 기능 개수 +1
idx++; //가장 앞에 있는 기능 인덱스 +1
if(idx >= progresses.length){ //인덱스 범위를 벗어났다면 모든 기능이 배포된 것이므로
break; //종료
}
}
if(cnt > 0){ //배포 가능한 기능(들)이 있으면
answer.add(cnt); //배고 가능한 기능 개수 저장
cnt = 0; // 초기화
}
}while(idx < progresses.length); //모든 기능들을 배포할 때 까지 반복
answer2 = new int[answer.size()]; //ArrayList -> Array로 변한하기 위해
for(int i=0;i<answer.size();i++){ //최종 리턴 값 Array에 담기
answer2[i] = answer.get(i);
}
return answer2;
}
}