새소식

📘 기초 지식/알고리즘

[알고리즘 풀이] 프린터

  • -

수도코드

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;
 }
}
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.