백준 1966번: 프린터 큐 [큐][자료구조] -Java :: 매운코딩
728x90
300x250

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

 

1966번: 프린터 큐

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

www.acmicpc.net

 

중요도만 따로 받아서 내림차순 정렬한후에

Queue에서 확인하며 하나씩 poll, add를 반복한다.

특정 순서의 문서가 몇번째로 나갔는지를 구하는 문제기에 특정 순서도 기억할 수 있도록 별도로 Doc Class를 생성

 

<Java 코드>

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Collections;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;

public class Main {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub

		//System.setIn(new FileInputStream("Test.txt"));
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		StringTokenizer st = new StringTokenizer(br.readLine());
		
		int T = Integer.parseInt(st.nextToken());
		
		for (int tc = 0; tc < T; tc++) {
			st = new StringTokenizer(br.readLine());
			int N = Integer.parseInt(st.nextToken());
			int M = Integer.parseInt(st.nextToken());
//			System.out.println("===N: "+N);
			Queue<Doc> q = new LinkedList<Doc>();
			Integer[] imptSeq = new Integer[N];
			
			st = new StringTokenizer(br.readLine()); 
			for (int n = 0; n < N; n++) {
				
				imptSeq[n] = Integer.parseInt(st.nextToken());
				q.add(new Doc(imptSeq[n],n));				
			}
			
			Arrays.sort(imptSeq, Collections.reverseOrder()); //내림차순 정렬
			
			int cnt = 0;
			for (int i = 0; i < N; i++) {
				
				int qSize = q.size();
				Doc d = null;
				while(qSize>0) {
					d = q.poll();
					if(imptSeq[i] == d.impt) {
						cnt++;
						break;
					} else {
						q.add(d);
						qSize--;
					}
				}
				
				if(M==d.seq) {
					System.out.println(cnt);
				}
			}
			
			
			
		}
		
	}

}

class Doc {
	int impt;
	int seq;
	
	public Doc(int impt, int seq) {
		this.impt = impt;
		this.seq = seq;
	}
}
728x90

+ Recent posts