프린터
-
순서대로 있기 때문에 -> queue
-
중요도를 queue에서 다 체크를 해줄 수 없다 -> priority queue
이 두개를 이용해서 priority queue의 중요도가 queue의 front 값과
똑같다면
- 그것이 알고 싶은 문서라면 종료
- 아니라면 priority queue와 queue의 있는 것들 둘 다 pop
다르다면 front의 값을 변수에 저장하고 pop 한 뒤에 다시 push (맨 끝으로 옮기는 과정)
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <string>
#include <vector>
#include <queue>
#include <math.h>
#include <algorithm>
#include <iostream>
using namespace std;
typedef pair<int,int> p;
int solution(vector<int> pr, int l) {
priority_queue<int, vector<int>, less<int>> pq;
queue<p> q;
int answer = 0;
for(int i=0; i < pr.size(); i++){
pq.push(pr[i]);
p temp = make_pair(i,pr[i]); // location = first, priority = second
q.push(temp);
}
while(q.size()){
int tempLocation = q.front().first;
int tempPriority = q.front().second;
int nowPriority = pq.top();
if(nowPriority == tempPriority){ // 지금 인쇄를 해야 하는 것이라면
if(tempLocation == l){ // 그게 알고 싶은 문서라면
answer++;
break;
}
else{
answer++;
pq.pop();
q.pop();
}
}
else{ // 아니라면 뒤로 뺴기
p temp = make_pair(tempLocation,tempPriority);
q.pop();
q.push(temp);
}
}
return answer;
}