본문 바로가기

Algorithm/BAEKJOON

[BOJ] 1966번 프린터 큐 (C++)

728x90
반응형

https://www.acmicpc.net/problem/1966

 

1966번: 프린터 큐

여러분도 알다시피 여러분의 프린터 기기는 여러분이 인쇄하고자 하는 문서를 인쇄 명령을 받은 ‘순서대로’, 즉 먼저 요청된 것을 먼저 인쇄한다. 여러 개의 문서가 쌓인다면 Queue 자료구조에

www.acmicpc.net

 

#include <iostream>
#include <queue>
using namespace std;

int main() {
	int c, n, m, num, tmp, cnt;
	cin >> c;

	for (int i = 0; i < c; i++) {
		cnt = 0;
		queue<pair<int, int>> q;
		priority_queue<int> pq;

		cin >> n >> m;
		for (int j = 0; j < n; j++) {
			cin >> num;
			q.push(pair<int, int>(j, num));
			pq.push(num);
		}
		while (!q.empty()) {
			int idx = q.front().first;
			int val = q.front().second;
			q.pop();

			if (pq.top() == val) {
				pq.pop();
				++cnt;
				if (idx == m) {
					cout << cnt << endl;
					break;
				}
			}
			else q.push(pair<int, int>(idx, val));
		}
	}
	return 0;
}

중요도가 나온 이 문제는 우선순위 큐 STL priority_queue를 사용해서 풀었다.

큐에는 인덱스와 그 인덱스에 해당하는 중요도 값을 쌍으로 넣고, 우선순위 큐에는 중요도를 넣게 되면 자동으로 크기가 큰 순으로 정렬된다. 큐가 빌 때까지 현재 중요도와 우선순위 큐에 있는 중요도를 확인하고 현재 인덱스와 찾을 인덱스 값이 일치할때까지 갯수를 증가시키며 반복한다.

728x90
반응형