백준(C, C++)/실버
백준 1966: 프린터 큐 [C/C++]
치킨먹고싶어요
2022. 6. 11. 17:46
https://www.acmicpc.net/problem/1966
1966번: 프린터 큐
여러분도 알다시피 여러분의 프린터 기기는 여러분이 인쇄하고자 하는 문서를 인쇄 명령을 받은 ‘순서대로’, 즉 먼저 요청된 것을 먼저 인쇄한다. 여러 개의 문서가 쌓인다면 Queue 자료구조에
www.acmicpc.net
#include <iostream>
#include <utility>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
int main() {
int t; cin >> t;
while (t--) {
queue<pair<int, int>> q;
int n, p, t;
cin >> n >> p;
vector<int> v(n);
for (int i = 0; i < n; i++) {
cin >> t;
v[i] = t;
q.push(make_pair(t, i)); // 입력값과 기존의 순서를 저장하기 위하여 pair<int, int>를 사용했습니다.
}
sort(v.begin(), v.end(), greater<>()); // 나머지 문서 중 중요도가 높은 것이 하나라도 남아 있는 지를 체크하기 위해서
int i = 0; // 몇 번 만에 찾았는 가를 알기 위해서, 중요도를 확인 하기 위해서 사용합니다.
while(!q.empty()) {
if (q.front().first == v[i]) { // 현재 Queue의 맨 앞에 있는 값이 가장 중요도가 높은 지를 확인합니다.
if (q.front().second == p) { // m번째 값이라면 몇 번 만에 찾았는지 출력합니다.
cout << i + 1 << "\n";
break;
}
else {
q.pop();
i++;
}
}
else { // 이 문서를 인쇄하지 않고 Queue의 맨 뒤에 넣습니다.
q.push(q.front());
q.pop();
}
}
}
return 0;
}
|
풀이:
pair과 queue를 사용하는 구현 문제 입니다.
위 두가지만 떠올린다면 풀 수 있습니다.