알고리즘/백준

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;
			}
			
		}
	}
}