인자 1: bufferSize
-> Number 타입의 인쇄 작업 목록 크기
인자 2: capacities
-> Number 타입의 인쇄 작업 목록에 추가될 수 있는 최대 용량
인자 3: documents
-> Number 타입을 요소로 갖는 문서 크기가 나열된 배열
출력
-> Number 타입을 리턴해야 합니다.
입출력 예시
let bufferSize = 2;
let capacities = 10;
let documents = [7, 4, 5, 6];
let output = queuePrinter(bufferSize, capacities, documents);
console.log(output) // 8
function queuePrinter(bufferSize, capacities, documents) {
숫자 0 으로 채워진 printerQueue(이하 Queue)를 만들기
documents의 가장 앞에 있는 요소를 제거해서, Queue의 가장 뒤쪽 요소와 바꿔준다.
1초의 시간이 흘러야 한다.
반복문(Queue의 데이터의 합이 0이 될 때 까지){
Queue 의 맨 앞의 값을 제거해주고,
Queue 안에 들어있는 데이터의 합을 계산해서,
if(다음 데이터를 넣을 수 있다면){
데이터를 넣어준다.
시간을 센다.
}
else {
0 을 넣어준다.
시간을 센다.
}
}
return 시간
}
unction queuePrinter(bufferSize, capacities, documents) {
let count = 0;
let queue = new Array(bufferSize).fill(0);
let currentDocu = documents.shift();
queue.shift();
queue.push(currentDocu);
let queueSum = currentDocu;
count = 1 ;
while(queueSum > 0){
currentDocu = documents.shift();
queueSum = queueSum-queue.shift();
if(currentDocu + queueSum <= capacities){
queue.push(currentDocu)
queueSum = queueSum+currentDocu;
count++
}
else {
queue.push(0);
documents.unshift(currentDocu);
count++
}
}
return count;
}
function queuePrinter(bufferSize, capacities, documents) {
let count = 0;
let queue = [];
let totalBufferVolume = 0;
for(let i = 0; i < bufferSize; i++){
queue.push(0);
}
let currentDocument = documents.shift();
queue.unshift(currentDocument);
queue.pop();
totalBufferVolume = totalBufferVolume + currentDocument;
count++;
while(totalBufferVolume){
totalBufferVolume = totalBufferVolume - queue.pop();
currentDocument = documents.shift();
if(currentDocument + totalBufferVolume <= capacities){
queue.unshift(currentDocument);
totalBufferVolume = totalBufferVolume + currentDocument;
}else{
documents.unshift(currentDocument);
queue.unshift(0);
}
count++;
}
return count;
}