수도코드
1. 1초마다 documents에서 printlist로 값을 추가, 이동, 출력
2. buffersize만큼 옆으로 이동
3. 옆으로 이동할 때 docunets의 다른 요소와 이미 추가된 요소의 합이 capacities를 넘지 않으면 추가
4. 넘으면 이동만
5. documents와 printlist가 모두 비면 시간 리턴
import java.util.*;
public class Solution {
public int queuePrinter(int bufferSize, int capacities, int[] documents) {
int second = 0;
Queue<Integer> printlist = new LinkedList<>();
for(int i = 0; i < bufferSize; i++) {
printlist.add(0);
}
printlist.poll();
printlist.add(documents[0]);
documents = Arrays.copyOfRange(documents, 1, documents.length);
second++;
while(documents.length != 0 || printlist.stream().reduce(0, Integer::sum) != 0) {
if(documents.length != 0) {
int sum = printlist.stream().reduce(0, Integer::sum) + documents[0];
if(sum > capacities) {
printlist.poll();
sum = printlist.stream().reduce(0, Integer::sum) + documents[0];
if(sum <= capacities) {
printlist.add(documents[0]);
documents = Arrays.copyOfRange(documents, 1, documents.length);
second++;
}else {
printlist.add(0);
second++;
}
}else {
printlist.poll();
printlist.add(documents[0]);
documents = Arrays.copyOfRange(documents, 1, documents.length);
second++;
}
}else {
printlist.poll();
printlist.add(0);
second++;
}
}
return second;
}
}