본문 바로가기

Algorithm/Brute Force

(C++) - 백준(BOJ) 1966번 : 프린터 큐 답

반응형

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

 

1966번: 프린터 큐

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

www.acmicpc.net

우선순위 큐, 큐를 사용하는 완전탐색 문제였습니다.

 

Code :

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <iostream>
#include <queue>
using namespace std;
int main(void){
    int t;
    cin >> t;
    while(t--){
        int N, M, ans = 0;
        queue <pair<intint>> q;
        //내림차순으로 정렬
        priority_queue <int> pq;
        cin >> N >> M;
        for (int i = 0; i < N; i++){
            int x;
            cin >> x;
            //문서번호, 중요도
            q.push({i,x});
            pq.push(x);
        }
 
        while (!q.empty()){
            //현재 배열의 인덱스와 중요도
            int currentPage = q.front().first;
            int currentImportance = q.front().second;
            q.pop();
            //현재 우선순위가 같다면.
            if (pq.top() == currentImportance){
                pq.pop();
                ans++;
                if (currentPage == M){
                    cout << ans << '\n';
                    break;
                }
            }
            else {
                q.push({ currentPage,currentImportance });
            }
        }
    }
}