Computer Science/C++
백준 C++ | #11 BOJ1966 프린터 큐 C++ 문제 풀이
토마토.
2022. 8. 10. 11:13
1966번: 프린터 큐
여러분도 알다시피 여러분의 프린터 기기는 여러분이 인쇄하고자 하는 문서를 인쇄 명령을 받은 ‘순서대로’, 즉 먼저 요청된 것을 먼저 인쇄한다. 여러 개의 문서가 쌓인다면 Queue 자료구조에
www.acmicpc.net
컴파일 에러가 자꾸 났는데 알고보니 #include <algorithm>을 안하고 std::sort를 써서 그런 거였다.
#include <iostream>
#include <queue>
#include <vector>
#include <utility>
#include <algorithm>
int main() {
int testcase;
std::cin >> testcase;
std::vector<int> answer;
for (int i = 0; i < testcase; i++) {
// 문서의 개수 n
// 출력 순서(우선순위 큐에서 몇번째 자리인지) 궁금한 m
int n, m;
std::cin >> n >> m;
std::vector<int> v;
std::queue<std::pair<int, int>> pqueue;
int tmp;
for (int j = 0; j < n; j++) {
std::cin >> tmp;
v.push_back(tmp);
if (j == m) {
pqueue.push(std::make_pair( tmp, 1 ));
}
else {
pqueue.push(std::make_pair(tmp, 0 ));
}
}
std::sort(v.begin(), v.end());
// m의 출력 순서는 m이 우선순위 큐 몇 번째 원소인지에 따라 알 수 있다.
int tmp_ans = 0;
while (true) {
if (v.back() == pqueue.front().first) {
if (pqueue.front().second == 1) {
tmp_ans++;
break;
}
else {
v.pop_back();
pqueue.pop();
tmp_ans++;
}
}
else {
pqueue.push( std::make_pair(pqueue.front().first, pqueue.front().second ));
pqueue.pop();
}
}
answer.push_back(tmp_ans);
}
std::vector<int>::iterator iter;
for (iter = answer.begin(); iter != answer.end(); iter++) {
std::cout << *iter << std::endl;
}
return 0;
}