열심히 코딩 하숭!

[알고리즘][큐] 1966번 프린터 큐 | baekjoon 문제 풀이 본문

카테고리 없음

[알고리즘][큐] 1966번 프린터 큐 | baekjoon 문제 풀이

채숭이 2023. 3. 27. 13:36

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

 

1966번: 프린터 큐

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

www.acmicpc.net

 

문제

 

 

풀이

문제에서 주어진 내용 그대로 따라갔다!

문서가 처음에 몇 번째 위치에 놓였는지와 문서의 중요도 값은 어떻게 되는지를 한번에 파악하기 위해

pair<> 클래스를 사용하여 데이터쌍을 만들어서 풀었다.

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

int main() {
	ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
	
	int T, N, M, importance,index; 
	int arr[100];
	cin >> T;

	for (int i = 0; i < T; i++) {
		queue<pair<int, int>> q;
		cin >> N >> M; // M은 0부터 / 주요도는 1 이상부터

		for (int j = 0; j < N; j++) {
			cin >> importance;
			q.push({ j, importance });
			arr[j] = importance;
		}		
		sort(arr, arr + N, greater<int>()); // 중요도 내림차순
		
		index = 0; // arr에서 사용하기 위한 변수

		while (index < N) {
			if (q.front().second == arr[index]) {
				if (q.front().first == M) {
					cout << index + 1 << '\n';
					break;
				}
				index++;
				q.pop();
			}
			else {
				pair<int, int> temp = q.front();
				q.pop();
				q.push(temp);
			}
		}
	}
}