본문 바로가기
백준/C++

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

by 대니스 2022. 8. 22.

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

 

1966번: 프린터 큐

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

www.acmicpc.net

소스 코드 : 

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <vector>
#include <algorithm>
#include <queue>
#include <vector>

using namespace std;

bool compare(int a, int b)
{
	return a > b;
}

typedef struct 
{
public:
	int num;
	int check;
}v;

int main()
{
	int N, M, num;
	int result;
	int point;
	cin >> num;

	while (num != 0)
	{
		queue<v> q;
		vector<int> v;
		vector<int> order;

		cin >> N >> M;
		for (int i = 0;i < N;i++)
		{
			int element;
			cin >> element;
			v.push_back(element);
			if (i == M)
			{
				q.push({ element,1 });
				point = M;
			}
			else q.push({ element,0 });
		}

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

		int a=0;
		for (int i = 0;i < v.size();i++)
		{
			for (int j = 0;j < q.size();j++)
			{
				
				int temp;
				temp = q.front().num;
				if (temp == v[i])
				{
					if (q.front().check == 1)
					{
						order.push_back(temp);
						a = 1;
						break;
					}
					order.push_back(temp);
					q.pop();
					point--;
					break;
				}
				else
				{
					int che = q.front().check;
					q.pop();
					q.push({temp,che});
					if (point == 0)
						point = q.size() - 1;
					else point--;
				}
			}
			if (q.front().check == 1 && a==1)
			{
				result = order.size();
				break;
			}
		}
		cout << result << '\n';
		num--;
	}
}

마무리 : 입력된 값을 큐에, 내림차순으로 정렬한 값과 순서에 맞게 배치된 값들을 저장할 벡터로 만들어 큐의 값이 정렬된 값과 같다면 순서를 저장할 벡터에 값을 저장하고 문제를 풀게 만들었다. 

'백준 > C++' 카테고리의 다른 글

백준 1654번 : 랜선 자르기 [C++]  (0) 2022.08.22
백준 2108번 : 통계학 [C++]  (0) 2022.08.22
백준 1929번 : 소수 구하기 [C++]  (0) 2022.08.18
백준 10866번 : 덱 [C++]  (0) 2022.08.18
백준 9012번 : 괄호 [C++]  (0) 2022.08.15