본문 바로가기
프로그래밍 문제/BOJ(백준 온라인 저지)

[BOJ 1966번] 프린터 큐(JAVA)

by 테크케찰 2020. 8. 2.

https://www.acmicpc.net/problem/1966

 

1966번: 프린터 큐

문제 여러분도 알다시피 여러분의 프린터 기기는 여러분이 인쇄하고자 하는 문서를 인쇄 명령을 받은 ‘순서대로’, 즉 먼저 요청된 것을 먼저 인쇄한다. 여러 개의 문서가 쌓인다면 Queue 자료��

www.acmicpc.net

import java.util.*;
import java.io.*;

public class Main {
	static BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
	static BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out));
	static StringBuilder sb=new StringBuilder();
	
	public static void main(String args[]) throws Exception {
		int num=Integer.parseInt(br.readLine());
		for(int iter=0;iter<num;iter++) {
			Queue<Data> queue=new LinkedList<>();
			String[] s=br.readLine().split(" ");
			int n=Integer.parseInt(s[0]);
			int m=Integer.parseInt(s[1]);
			String[] s2=br.readLine().split(" ");
			for(int i=0;i<n;i++) {
				queue.offer(new Data(i, Integer.parseInt(s2[i])));
			}
			int cnt=1;
			while(!queue.isEmpty()) {
				Data currentData=queue.poll();
				Iterator<Data> iterator=queue.iterator();
				boolean isCheck=true;
				while(iterator.hasNext()){
					Data data=(Data)iterator.next();
					if(currentData.priority<data.priority) {
						isCheck=false;
						break;
					}
				}
				if(isCheck==false) queue.offer(currentData);
				else {
					if(currentData.index==m) System.out.println(cnt);
					else cnt++;
				}
			}
		}
	}
	
}

class Data{
	int index;
	int priority;
	public Data(int index, int priority) {
		this.index=index;
		this.priority=priority;
	}
}







 이 문제는 큐를 이용해서 해결하려고 했는데요, Data 클래스를 선언해줘서 큐를 관리했습니다.

Data 클래스에는 처음에 삽입되는 순서인 index 변수와, 우선순위를 나타내는 priority 변수를 선언해주었습니다.

처음에 cnt라는 변수(원하는 데이터가 몇 번째에 출력되는지 나타내는 변수)를 선언하고, 큐에서 데이터를 빼내줍니다.

그리고 Iterator를 이용해서 큐를 모두 살펴보면서 만약 현재 빼낸 데이터의 우선순위보다 큰 우선순위를 가진 데이터가 있으면 빼낸 큐를 다시 삽입하는 방식으로 큐를 정렬시켰습니다.

여기서 iterator 클래스는 컬렉션 클래스에서 데이터를 읽어올 때 쓰입니다.

제가 썼던 iterator 함수를 살펴보면 hasNext()는 boolean 함수로 데이터가 iterator에 남아 있으면 true, 아니면 false를 출력합니다.

그리고 next() 메서드는 다음 데이터를 나타냅니다.

다시 문제로 돌아가보면, 만약 현재 데이터의 우선순위보다 큰 우선순위를 가진 데이터가 없으면 cnt를 +1해주고, 데이터가 출력되는 순서가 되면 cnt 값을 출력해주었습니다.