Andrew-Yun 2021. 2. 1. 16:56

programmers.co.kr/learn/courses/30/lessons/42587

 

코딩테스트 연습 - 프린터

일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린

programmers.co.kr

이 문제에서 생각해 볼 점은 프린터의 인쇄 순위와 대기 목록의 후순위로 들어가야 하는 점이다.

각각을 자료구조로 나눠서 저장하고, 처리하도록 해보자

1. 프린터의 인쇄 순위

 순위에 따라 정렬이 필요하기 때문에, 우선순위 큐를 이용하여 우선순위대로 정렬한 뒤, 대기 목록의 맨 앞의 우선순위와 일치한다면 pop한다.

2. 대기 목록

 큐를 이용하여 대기하는 순서대로 pop한 뒤, 인쇄 순위와 일치하지 않는다면, 다시 맨 뒤로 보낸다.

 

이 때, 큐에서 pop 될 때마다 카운트하여 인수로 받은 location과 대기 순서가 일치한다면, 정답으로 저장하도록 했다.

#include <string>
#include <vector>
#include <queue>

using namespace std;

int solution(vector<int> priorities, int location)
{
	int answer = 0;
	priority_queue<int> pq;
	queue<int> q;
	for (int i = 0; i < priorities.size(); i++) {
		pq.push(priorities[i]);
		q.push(i);
	}
	while (!q.empty()) {
		int l = q.front();
		if (priorities[l] == pq.top()) {
			q.pop();
			pq.pop();
			answer++;
			if (l == location)
				break;
		}
		else {
			q.pop();
			q.push(l);
		}
	}
	return answer;
}