본문 바로가기

알고리즘(C++)/백준 알고리즘

[백준] C++ 1966번 : 프린터 큐

풀이과정


내용

 

코드


코드1(정렬된 vector로 우선순위 나타냄)

더보기
#include <iostream>
#include <queue>
#include<vector>
#include <string>
#include <algorithm>
using namespace std;

int main()
{
	int iCaseNum = 0;

	cin >> iCaseNum;

	for (int i = 0; i < iCaseNum; ++i)
	{
		queue<int> q;
		vector<int> v;

		int iInputSize = 0;
		int iTargetPos = 0, iTargetValue = 0;
		int iOutputCount = 0;

		cin >> iInputSize >> iTargetPos;

		for (int i = 0; i < iInputSize; ++i)
		{
			int iValue = 0;
			cin >> iValue;
			q.push(iValue);
			v.push_back(iValue);
		}

		iTargetValue = v.at(iTargetPos);

		sort(v.begin(), v.end());

		while (iTargetPos != 0 || v.at(v.size() - 1) != q.front())
		{
			if (q.front() != v.at(v.size() - 1))
			{
				q.push(q.front());
				q.pop();
			}
			else
			{
				q.pop();
				v.pop_back();
				iOutputCount++;
			}
			if (iTargetPos != 0) iTargetPos--;
			else iTargetPos = v.size() - 1;
		}

		cout << iOutputCount + 1 << endl;
	}
	return 0;
}

코드2 (우선순위 큐)

더보기
#include <iostream>
#include <queue>
#include <string>
using namespace std;

int main()
{
	int iCaseNum = 0;

	cin >> iCaseNum;

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

		int iInputSize = 0;
		int iTargetIndex = 0;
		int iOutputCount = 0;

		cin >> iInputSize >> iTargetIndex;

		for (int i = 0; i < iInputSize; ++i)
		{
			int iValue = 0;
			cin >> iValue;
			q.push({ i,iValue });
			pq.push(iValue);
		}

		while (!q.empty())
		{
			int currIndex = q.front().first;
			int currValue = q.front().second;

			q.pop();

			if (pq.top() == currValue)
			{
				pq.pop();
				iOutputCount++;

				if (currIndex == iTargetIndex) 
				{
					cout << iOutputCount << endl;
					break;
				}
			}
			else
			{
				q.push({ currIndex ,currValue });
			}
		}

	}
	return 0;
}