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 |