[백준/BOJ] 백준 1966번 : 프린터 큐
2020. 6. 5. 02:30ㆍ알고리즘 문제풀이
https://www.acmicpc.net/problem/1966
문서의 중요도를 저장할 우선순위 큐와 각 문서의 위치와 그에 해당하는 중요도를 저장할 큐를 만들었다.
우선순위 큐의 top부분과 큐의 front부분 중요도가 같은지 비교해, 중요도가 같다면 프린트하고 그렇지 않으면 큐에서 해당 부분을 뒤로 보냈다. 그리고 프린트를 할 때 그 문서가 궁금한 문서이면 그때의 문서가 몇 번째로 인쇄되는지 구하였다.
코드
#include <iostream>
#include <vector>
#include <queue>
#include <utility>
#include <algorithm>
using namespace std;
int main()
{
cin.tie(NULL);
ios_base::sync_with_stdio(false);
int testcase;
int n; //문서의 수
int m; //몇번째로 인쇄되었는지 궁금한 문서
cin >> testcase;
for (int t = 0; t < testcase; t++)
{
cin >> n;
cin >> m;
queue <pair<int, int>> box;//문서위치와, 중요도를 저장
int temp;
priority_queue<int> value;//중요도를 내림차순으로 정렬
for (int i = 0; i < n; i++)
{
cin >> temp;
value.push(temp);
box.push(make_pair(i, temp));
}
int num = 1;
while (1)
{
if (value.top() == box.front().second)
{
if (box.front().first == m)//궁금한 문서를 프린트할때
break;
else//궁금한 문서가 아닌 다른 문서를 프린트할때
{
num++;
value.pop();
box.pop();
}
}
else
{
//앞에 것을 다시 뒤로 보낸다.
pair<int,int> temp_pair = box.front();
box.pop();
box.push(temp_pair);
}
}
cout << num <<"\n";
}
return 0;
}
'알고리즘 문제풀이' 카테고리의 다른 글
[백준/BOJ] 백준 11399번 : ATM (0) | 2020.06.06 |
---|---|
[백준/BOJ] 백준 1018번 : 체스판 다시 칠하기 (0) | 2020.06.05 |
[백준/BOJ] 백준 14888번 : 연산자 끼워넣기 (0) | 2020.06.04 |
[백준/BOJ] 백준 6603번 : 로또 (0) | 2020.06.04 |
[백준/BOJ] 백준 14502번 : 연구소 (0) | 2020.06.04 |