출처 : https://www.acmicpc.net/problem/1966
1966번: 프린터 큐
첫 줄에 test case의 수가 주어진다. 각 test case에 대해서 문서의 수 N(100이하)와 몇 번째로 인쇄되었는지 궁금한 문서가 현재 Queue의 어떤 위치에 있는지를 알려주는 M(0이상 N미만)이 주어진다. 다음
www.acmicpc.net
고려사항
- 1번째 부터 시작이니 최종 ans + 1 출력.
- q에는 몇번 째 수 인지 나타내는 idx도 페어로 삽입.
- 실제 프린터 대기열인 q의 front와 정해진 다음 출력 우선순위를 나타내는 pq의 top 을 비교.
- 우선순위가 같으면서 idx까지 m 과 같다면 정답출력, 아니면 pq, q에서 pop 후 ans += 1;
- 우선순위가 다르면 맨뒤로 삽입
#include <iostream>
#include <queue>
using namespace std;
int main() {
int n, m, t, num, target, ans;
cin>>t;
for(int i=0;i<t;++i){
priority_queue<int> pq;
queue<pair<int, int>> q;
ans = 0;
cin>>n>>m;
for(int j=0;j<n;++j){
cin>>num;
if(j == m){
target = num;
}
pq.push(num);
q.push({num, j});
}
while(true){
if(q.front().first == target && pq.top() == q.front().first && q.front().second == m){
cout<<ans+1<<"\n";
break;
}else if(q.front().first == pq.top()){
pq.pop();
q.pop();
++ans;
}else{
q.push({q.front().first, q.front().second});
q.pop();
}
}
}
return 0;
}
'BOJ 백준 > 기타' 카테고리의 다른 글
백준 05430 - AC (0) | 2020.11.05 |
---|---|
백준 01021 - 회전하는 큐 (0) | 2020.11.05 |
백준 11866 - 요세푸스 문제 0 (0) | 2020.11.01 |
백준 18258 - 큐 2 (0) | 2020.10.31 |
백준 01874 - 스택 수열 (0) | 2020.10.31 |