PS/BOJ 백준

/<BOJ 백준 1966번> 프린터 큐 - Java

BinaryStar 2023. 7. 22. 22:39

문제 1966번 : 프린터 큐

문제 해설

문제의 이름과 설명에 나와있듯이 자료구조 큐(Queue)를 이용하여 문제를 풀 수 있다. 큐의 선입선출(First-In-First-Out) 특성을 이용하면 어렵지 않게 풀 수 있는 문제이다.

코드

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

public class Main {

    public void solution() throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int testCase = Integer.parseInt(br.readLine());

        Queue<int[]> queue = new LinkedList<>(); // 큐에 (인덱스, 우선순위) 쌍으로 저장

        for (int i = 0; i < testCase; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            int N = Integer.parseInt(st.nextToken());
            int M = Integer.parseInt(st.nextToken());

            st = new StringTokenizer(br.readLine());
            for (int j = 0; j < N; j++) {
                int priority = Integer.parseInt(st.nextToken());
                queue.add(new int[] { j, priority });
            }

            int count = 0;

            while (!queue.isEmpty()) {
                int[] front = queue.poll();
                int index = front[0];
                int priority = front[1];

                boolean isHighestPriority = true;

                // 큐에 남아있는 원소들 중에 현재 문서보다 우선순위가 높은 문서가 있는지 확인
                for (int[] document : queue) {
                    if (document[1] > priority) {
                        isHighestPriority = false;
                        break;
                    }
                }

                if (isHighestPriority) {
                    count++;
                    if (index == M) {
                        System.out.println(count);
                        break;
                    }
                } else {
                    // 우선순위가 높은 문서가 있으면 다시 큐의 뒤로 이동
                    queue.add(new int[] { index, priority });
                }
            }

            queue.clear(); // 큐를 비워 다음 테스트 케이스를 위해 초기화
        }
    }

    public static void main(String[] args) throws Exception {
    	new Main().solution();
    }
}

 

큐에 정수형 배열을 하나의 원소로 추가하였다. 배열은 각각 {인덱스, 우선순위} 로 구성되어 있다. 입력에서 O(testCase * N) 시간복잡도를 갖으므로 전체 코드는 O(N*N)의 시간복잡도를 갖는다.