본문 바로가기
알고리즘

[백준/JAVA] 1966 프린터큐

by writing turtle 2024. 11. 10.

 

 

푸는데 꽤나 애를 먹었다. 클래스도 새로 선언해야했고, 정렬때문에 comparable도 상속받아야했다.

수를 입력받을 때 배열과 큐에 각각 저장을 한 후에 배열은 내림차순 정렬을 해주었다.

중요도가 높은게 나올때까지 poll과 add를 반복.. 중요도가 가장 높은걸 뽑고.. 그다음뽑고..

그러다가 내가 원하는게 나오면 완료

import java.util.Arrays;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;

class Printer implements Comparable<Printer>{
	int order;
	int num;
	int idx;

	public Printer(int num, int idx) {
		this.num = num;
		this.idx =idx;
	}
	@Override
	public int compareTo(Printer o) {
		return o.num- num;
	}
	
	
}
public class Main{
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		int testCase = sc.nextInt();
		
		for(int tc=1; tc<=testCase; tc++){
			int n = sc.nextInt();
			int index = sc.nextInt();
			Printer []arr = new Printer [n];
			Queue<Printer> q = new LinkedList<>();
			for(int i=0; i<n; i++){
				int num = sc.nextInt();

				arr[i] = new Printer(num, i);
				q.add(new Printer(num, i));
			}
			int cnt = 0;
			Arrays.sort(arr);
			
			for(int i=0; i<arr.length; i++){
				System.out.println(arr[i].idx + " " + arr[i].num);
			}
			while(true){
				if(arr[cnt].num == q.peek().num && q.peek().idx == index){
					break;
				}else if(arr[cnt].idx == q.peek().idx){
					q.poll();
					cnt++;
				}else {
					Printer poll = q.poll();
					q.add(poll);
				}

			}
			System.out.println("#"+ tc + " " + (cnt+1));
		}
	}
}