Problem
Problem URL : 프린터 큐
[1] Answer Code (18. 09. 27)
#include <string>
#include <vector>
#include <queue>
#include <iostream>
#define p pair<int,int>
using namespace std;
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int tc;
cin >> tc;
while (tc--) {
int n;
int location;
cin >> n >> location;
vector<int> priorities;
for(int i=0; i<n ;i++){
int tmp;
cin >> tmp;
priorities.push_back(tmp);
}
int answer = 0;
queue<p> q;
priority_queue<int> pq;
int size = (int) priorities.size();
for(int i=0; i<size; i++){
q.push( {priorities[i],i} );
pq.push(priorities[i]);
}
while(! q.empty()){
int value = q.front().first;
int idx = q.front().second;
q.pop();
if( pq.top() == value){
pq.pop();
answer++;
if(idx == location){
cout << answer << endl;
break;
}
}
else{
q.push( {value,idx} );
}
}
}
return 0;
}
Review
-
- priority_queue에 top과 queue에 front가 같다 && 그 index도 같다면 답을 출력시켜주면 된다.
-
Programmers에는 42857. 프린터라는 이름으로 있다.
- 출처는 The 2006 ACM Northwestern European Programming Contest이다.