[Java] 백준 1966번 프린터 큐

2022. 4. 13. 19:28
728x90

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

 

1966번: 프린터 큐

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

www.acmicpc.net

이번 문제는 중요도와 문서의 위치와 중요도를 저장하여 현재 리스트에서 우선순위가 높은 순서대로 만들어 M과 위치가 같을 경우 이 문서가 몇번째로 인쇄되는지 카운트로 출력해주면 됩니다.

 

처음 문제를 접했을 때 조금 어렵게 생각했었는데,

생각해보니 그냥 값을 리스트에 순서와 중요도를 넣어 하나씩 비교해주면 된다고 생각했습니다.

 

현재 비교할려는 중요도보다 큰 값이 Q에 존재할 경우 마지막으로,

큰 값이 없을 경우 카운트 증가와 M과 비교하여 같을 경우 카운트를 출력해주면 됩니다.

 

package BJ;

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

public class BJ_프린터큐 {
	static int T;
	static int N, M;
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		T = Integer.parseInt(br.readLine());
		
		for (int t = 0; t < T; t++) {
			StringTokenizer st = new StringTokenizer(br.readLine());
			N = Integer.parseInt(st.nextToken());
			M = Integer.parseInt(st.nextToken());
			
			int cnt = 0;
			
			Queue<int []> q = new LinkedList<>();
			st = new StringTokenizer(br.readLine());
			for (int i = 0; i < N; i++) {
				q.offer(new int[] {i, Integer.parseInt(st.nextToken())});
			}
			while(!q.isEmpty()) {
				int[] now = q.poll();
				boolean check = true;
				for (int[] que : q) {
					if(que[1] > now[1]) {
						check = false;
						break;
					}
				}
				
				if(check) {
					cnt++;
					if(now[0] == M) break;
				} else {
					q.add(now);
				}
			}
			System.out.println(cnt);
			
		}

	}

}

 

Ysik Github : https://github.com/Y1sik/Algorithm/blob/main/BJ/BJ_%ED%94%84%EB%A6%B0%ED%84%B0%ED%81%90.java

반응형

'알고리즘' 카테고리의 다른 글

[Java] 백준 1357번 뒤집힌 덧셈  (0) 2022.04.15
[Java] 백준 14503번 로봇 청소기  (0) 2022.04.14
[Java] 백준 7567번 그릇  (0) 2022.04.12
[Java] 백준 1439번 뒤집기  (0) 2022.04.11
[Java] 백준 1373번 2진수 8진수  (0) 2022.04.10

BELATED ARTICLES

more