알고리즘/백준
BOJ 1966 프린터 큐 / C++
내이름은 킹햄찌
2022. 7. 26. 22:17
https://www.acmicpc.net/problem/1966
1966번: 프린터 큐
여러분도 알다시피 여러분의 프린터 기기는 여러분이 인쇄하고자 하는 문서를 인쇄 명령을 받은 ‘순서대로’, 즉 먼저 요청된 것을 먼저 인쇄한다. 여러 개의 문서가 쌓인다면 Queue 자료구조에
www.acmicpc.net
백준 온라인저지 1966번 프린터 큐 문제입니다.
아이디어
프로그래머스에 있는 프린터 문제랑 비슷한 문제입니다.
우선큐로 작업의 순위를 담고 작업을 큐에 담에서 우선순위를 가지는 작업이 아니면 큐의 뒤로 보내고 찾는 작업이 완료되었을때 로직이 마무리 되도록 처리했습니다.
#include<iostream>
#include<queue>
using namespace std;
int t;
int main(void) {
cin >> t;
while (t--) {
int n, m;
int cnt = 0;
cin >> n >> m;
//프린트 큐에서 우선순위를 차례대로 정렬하는 우선 큐
priority_queue<int> pq;
//작업의 우선순위와 작업의 순서를 담을 큐
queue<pair<int, int>> q;
for (int i = 0; i < n; i++) {
int k;
cin >> k;
pq.push(k);
q.push({ k,i });
}
while (true) {
int priority = q.front().first;
int pos = q.front().second;
q.pop();
//현재 최우선 순위와 현재 작업의 순위가 맞는지 확인
if (priority != pq.top()) {
q.push({ priority,pos });
continue;
}
//최우선 순위의 작업이 수행되었음
pq.pop();
cnt++;
//찾는 작업이 완료되었을때
if (pos == m) {
cout << cnt << "\n";
break;
}
}
}
}