본문 바로가기

Problem Solving/백준

[백준] 1966: 프린터큐

프린터큐가 날 눈물짓게 해...

생각보다 구현이 사나워서 해답을 찾아보니 priority queue를 사용한 풀이가 나왔다.

그런데 생각보다 priority queue로 해결하는 것이 아닌, queue, priority queue를 2개 다 쓰길래

그냥 queue, vector로 구현했다.

원래는 priority queue에서 pair로 받아서 compare하는 부분을 정의해서 queue하나로 다 완성하고 싶었는데

우선 compare부분을 내가 정의하려고 하는것에서 실패했고,

출력순서를 신경써야 하기 때문에 한 큐에 해결이 불가능하긴 했다.

 

priority_queue 쓰는거랑, vector에 저장해서 sort 하는거랑 큰 차이가 있는지는 모르겠다. (둘 중에 뭐가 더 빠를까?)

 

내가 짠 코드

#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>

using namespace std;

bool comp(int a, int b){
    return a>b;
}
int main(void){
    int T,N,O;
    int i,j,value;
    int idx,prior;

    scanf("%d",&T);
    
    for(i=0;i<T;i++){
        scanf("%d %d",&N,&O);
        vector <int > v;
        queue <pair <int, int > > q;
        for(j=0;j<N;j++){
            scanf("%d",&value);
            q.push(make_pair(j,value));
            v.push_back(value);
        }
        sort(v.begin(),v.end(),comp);
       
        for(j=0;j<N;j++){
            while(q.front().second != v[j]){
                idx = q.front().first;
                prior = q.front().second;
                q.pop();
                q.push(make_pair(idx,prior));
            }

            if(q.front().first==O) {
                printf("%d\n",j+1);
                break;
            }

            q.pop();
        }
    }
    return 0;
}


www.acmicpc.net/problem/1966

 

1966번: 프린터 큐

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

www.acmicpc.net

 

'Problem Solving > 백준' 카테고리의 다른 글

[Kotlin] 코틀린 중복된 횟수 구하기  (0) 2022.09.30
[백준] 1406번: 에디터  (0) 2021.02.24
[백준] 9012: 괄호  (0) 2021.02.24
[백준] 10816: 숫자 카드 2  (0) 2021.02.24
[백준] 11651번 : 좌표 정렬하기 2  (0) 2021.02.24