프로그래밍 문제/BOJ(백준 온라인 저지)
[BOJ 1966번] 프린터 큐(JAVA)
테크케찰
2020. 8. 2. 00:00
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 값을 출력해주었습니다.