득이공간

[백준 C++] 1966 프린터 큐 - 자료구조 본문

PS/알고리즘 문제풀이

[백준 C++] 1966 프린터 큐 - 자료구조

쟁득 2024. 2. 3. 13:57
 

1966번: 프린터 큐

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

www.acmicpc.net

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

void TestCase()
{
	int N, M;
	cin >> N >> M;

	deque<pair<int, int>> PrinterQueue;
	for (int i = 0; i < N; ++i)
	{
		int Priority;
		cin >> Priority;
		PrinterQueue.emplace_back(Priority, i);
	}
	
	int Cnt = 1;
	while (!PrinterQueue.empty())
	{
		int Priority = PrinterQueue.front().first;
		int Order = PrinterQueue.front().second;

		if (Priority == (*max_element(PrinterQueue.begin(), PrinterQueue.end())).first)
		{
			PrinterQueue.pop_front();

			if (Order == M)
			{
				break;
			}

			++Cnt;
		}
		else
		{
			PrinterQueue.pop_front();
			PrinterQueue.emplace_back(Priority, Order);
		}
	}

	cout << Cnt << '\n';
}

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	int TC;
	cin >> TC;
	for (int i = 0; i < TC; ++i)
	{
		TestCase();
	}
}

큐 자료구조 이용해서 푸는 문제입니다.

max_element 함수 사용을 위해 deque에 데이터를 담았습니다.

주의할 점은 중요도가 같은 문서들끼리의 인쇄 순서를 어떻게 체크할지 잘 생각해보아야 하는 것입니다.