본문 바로가기

ALGORITHM

백준 1966 프린터 큐 (Java)

1. 문제 링크

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

 

1966번: 프린터 큐

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

www.acmicpc.net

 

2. 문제 및 입출력예제

 

3. 문제 풀이

큐에 입력받은 문서의 번호와 중요도를 넣는다.

그리고 중요도는 따로 list에 저장해서 중요도가 가장 높은 문서를 찾기 위해 사용한다.

이 중요도는 Collections.reverseOrder()로 숫자가 큰 순서, 즉 내림차순으로 정렬한다.

큐에서 하나씩 빼면서 중요도가 가장 높은 문서가 아니라면 다시 큐에 넣는다.

중요도가 가장 높은 문서는 빼는데 그게 원하는 문서라면 반복문을 끝낸다.

 

4. 코드

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Queue;
import java.io.IOException;

public class Main {
	static class Node{
		int num;
		int star;
		public Node(int num, int star) {
			super();
			this.num = num;
			this.star = star;
		}
	}
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		int T = Integer.parseInt(br.readLine());
		for(int t=0;t<T;t++) {
			String[] split = br.readLine().split(" ");
			int N = Integer.parseInt(split[0]);
			int M = Integer.parseInt(split[1]);
			Queue<Node> queue = new ArrayDeque<>();
			ArrayList<Integer> list = new ArrayList<>();
			split = br.readLine().split(" ");
			for(int i=0;i<N;i++) {
				int temp = Integer.parseInt(split[i]);
				queue.offer(new Node(i, temp));
				list.add(temp);
			}
			
			Collections.sort(list, Collections.reverseOrder());
			int result = 0;
			while(true) {
				Node now = queue.poll();
				if(now.star == list.get(0)) { //제일 중요도가 큰 녀석
					if(now.num == M) { //그게 원하는 문서라면
						result++;
						break;
					}
					else { //아니라면 그 중요도만 지움
						list.remove(0);
						result++;
					}
				}
				else {
					queue.offer(now);
				}
			}
			sb.append(result).append("\n");
		}		
		System.out.println(sb);
	}

}

 

'ALGORITHM' 카테고리의 다른 글

백준 10971 외판원 순회2 (Java)  (0) 2023.04.23
백준 1874 스택 수열 (Java)  (0) 2023.04.23
백준 1463 1로 만들기 (Java)  (0) 2023.04.22
백준 6593 상범 빌딩 (Java)  (0) 2023.04.21
백준 14502 연구소 (Java)  (0) 2023.04.21