공부/PS (백준)

[BOJ] 1966 프린터 큐 / C++

happyst 2022. 5. 18. 02:06

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

 

1966번: 프린터 큐

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

www.acmicpc.net

 

#include <stdio.h>
#include <queue>

using namespace std;

int T, N, M;

queue <pair<int, int> > q;
priority_queue <int> pq;
int sequence[110];
int cnt, answer;

void init()
{
	for (int i = 0; i <= 100; i++)
	{
		sequence[i] = 0;
	}

	q = queue<pair<int, int> >(); // queue 초기화
	pq = priority_queue<int>(); // queue 초기화

	cnt = 1;
	answer = 0;
}

int main(void)
{
	scanf("%d", &T);
	while (T--)
	{
		init();
		scanf("%d %d", &N, &M);
		
		for (int i = 0; i < N; i++)
		{
			int x;
			scanf("%d", &x);
			q.push({ i,x });
			pq.push(x);
		}

		while (!q.empty())
		{
			int cur_index = q.front().first;
			int cur_priority = q.front().second;
			int top_priority = pq.top();

			q.pop();

			if (cur_priority >= top_priority)
			{
				// 현재 문서가 나머지 문서들보다 우선순위가 높음
				pq.pop();
				sequence[cur_index] = cnt++;
			}
			else
			{
				q.push({ cur_index, cur_priority });
			}
		}

		printf("%d\n", sequence[M]);
	}
	return 0;
}

배운 것

 

  • C++ STL 우선순위 큐 사용

  • queue 컨테이너 초기화

#include <queue>

queue <int> q; // queue 선언

q = queue <int>(); // queue 초기화