4번 문제
1966번: 프린터 큐
첫 줄에 test case의 수가 주어진다. 각 test case에 대해서 문서의 수 N(100이하)와 몇 번째로 인쇄되었는지 궁금한 문서가 현재 Queue의 어떤 위치에 있는지를 알려주는 M(0이상 N미만)이 주어진다. 다음
www.acmicpc.net
내가 풀이한 답
문제에서 문서의 인덱스를 기준으로 문서를 찾아야 하기 때문에 <int, int> 쌍의 queue 자료구조와 문서의 중요도를 확인하기 위해 priority_queue 자료구조를 사용하였다. priority_queue의 첫 번째 요소와 queue의 중요도가 같지 않으면 queue의 첫 번째 요소를 뒤로 보내고 만약 priority_queue의 첫 번째 요소와 queue의 중요도가 같고 문서의 인덱스와 주어진 문제의 인덱스(m)와 같으면 종료하고 그렇지 않으면 priority_queue의 첫 번째 요소와 queue의 첫 번째 요소를 제거한다.
//#include <bits/stdc++.h>
#include <iostream>
#include <queue>
using namespace std;
int main() {
//freopen("input.txt", "rt", stdin);
int t, i, n, m, j, a, idx, imp, cnt;
cin >> t;
for(i=0; i<t; i++){
cnt=0;
queue<pair<int, int> > q;
priority_queue<int> pq;
cin >> n >> m;
for(j=0; j<n; j++){
cin >> a;
q.push({j, a});
pq.push(a);
}
while(true){
idx = q.front().first;
imp = q.front().second;
if(imp == pq.top()){
cnt++;
if(idx==m) break;
q.pop();
pq.pop();
}
else {
q.push({idx, imp});
q.pop();
}
}
cout << cnt << endl;
}
return 0;
}
'알고리즘 & 자료구조 > 스택, 큐' 카테고리의 다른 글
3. 요세푸스 문제 0(Queue) (0) | 2020.10.31 |
---|---|
2. 카드2(Queue) (0) | 2020.10.31 |
1. K진수 출력(Stack) (0) | 2020.10.24 |