큐 뿐만 아니라 리스트 활용을 배울수 있었다.
제일 앞에 있는 큐에 속도 * 날짜를 더한 값
을 비교하여 배포가 가능한지 확인.import java.util.Queue;
import java.util.LinkedList;
import java.util.ArrayList;
import java.util.List;
class Solution {
public int[] solution(int[] progresses, int[] speeds) {
Queue<Integer> Q = new LinkedList<Integer>();
List<Integer> temp = new ArrayList<Integer>();
int i;
int date = 0;
int cnt = 0;
for(i = 0; i < progresses.length; i++) {
Q.add(progresses[i]);
}
i = 0;
while(!Q.isEmpty()) {
if(Q.peek() + (speeds[i] * date) >= 100) {
Q.remove();
i++;
cnt++;
}
else {
if(cnt != 0) {
temp.add(cnt);
}
cnt = 0;
date++;
}
}
temp.add(cnt);
int[] answer = new int[temp.size()];
for (i = 0; i < answer.length; i++) {
answer[i] = temp.get(i);
}
return answer;
}
}
while(!Q.isEmpty()) {
if(Q.peek() + (speeds[i] * date) >= 100) {
Q.remove();
i++;
cnt++;
}
else {
if(cnt != 0) {
temp.add(cnt);
}
cnt = 0;
date++;
}
}
temp.add(cnt);
먼저 큐가 빌때까지 반복한다.
큐 맨 앞에 있는 작업 진도율
+ (작업 속도 * 지난 일 수) 을 하면 현재 진도율을 알수 있다.
그 값이 100이 넘어 작업이 완료되었다면, 큐 맨 앞에 있는 값을 지운다.
해당 날에 끝낼 수 있는 작업을 카운트하기 위해 cnt++
한다.
날짜는 그대로인 상태로 if문을 돈다.
큐 맨 앞의 작업이 끝났으면 똑같이 remove()
와 cnt++
를 하며 또 다시 반복.
큐 맨 앞의 작업이 끝나지 않았을 경우 지금까지 카운트한 cnt 값을 List에 넣는다.
날짜를 다음날로 이동한다.
마지막 작업이 끝나면 큐가 비어 while문이 끝나므로 temp.add(cnt);
를 해준다.
int[] answer = new int[temp.size()];
for (i = 0; i < answer.length; i++) {
answer[i] = temp.get(i);
}
return answer;
answer 배열을 temp List 사이즈 만큼 선언한다.
for문으로 answer배열에 List 값을 넣는다.
오빵 멋있어용😍