백준

백준 큐 - 1966번 : 프린터 큐

맴썰 2022. 3. 2. 16:03

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

 

1966번: 프린터 큐

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

www.acmicpc.net

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

public class Main {
	public static void main(String[] args) throws IOException {
		BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		int n = Integer.parseInt(br.readLine());
		for(int i=0; i<n; i++) {
			StringTokenizer st = new StringTokenizer(br.readLine());
			int num = Integer.parseInt(st.nextToken());
			int idx = Integer.parseInt(st.nextToken());
			ArrayList<Integer> print = new ArrayList<>();
			st = new StringTokenizer(br.readLine());
			int[] arr = new int[num];
			
			for(int j=0; j<num; j++) {
				int temp = Integer.parseInt(st.nextToken());
				print.add(temp);
				arr[j] = temp;
			}
			int max = getmax(arr);
			int cnt = 1;
			int p=1;
			while(true) {
				int temp = print.get(0);
				print.remove(0);
				if(temp==max) {
					if(idx==0){
						bw.write(p+"\n");
						break;
					}
					else idx-=1;
					arr[getmidx(arr,max)] = -1;
					max = getmax(arr);
					p++;
					num--;
				}
				else {
					print.add(temp);
					if(idx==0) {
						idx = num-1;
					}
					else idx-=1;
				}
			}
		}
		bw.close();
	}
	static int getmax(int[] arr) {
		int max = Integer.MIN_VALUE;
		for(int i=0; i<arr.length; i++) {
			if(arr[i]>max) {
				max = arr[i];
			}
		}
		return max;
	}
	static int getmidx(int[] arr,int max) {
		for(int i=0; i<arr.length; i++) {
			if(arr[i]==max) {
				return i;
			}
		}
		return 0;
	}
}