백준(C, C++)/실버

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

치킨먹고싶어요 2022. 6. 11. 17:46

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

 

1966번: 프린터 큐

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

www.acmicpc.net

 

#include <iostream>
#include <utility>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
int main() {
    int t; cin >> t;
    while (t--) {
        queue<pair<intint>> q;
        int n, p, t;
        cin >> n >> p;
        vector<int> v(n);
        for (int i = 0; i < n; i++) {
            cin >> t;
            v[i] = t;
            q.push(make_pair(t, i)); // 입력값과 기존의 순서를 저장하기 위하여 pair<int, int>를 사용했습니다.
        }
        sort(v.begin(), v.end(), greater<>()); // 나머지 문서 중 중요도가 높은 것이 하나라도 남아 있는 지를 체크하기 위해서
        int i = 0; // 몇 번 만에 찾았는 가를 알기 위해서, 중요도를 확인 하기 위해서 사용합니다.
        while(!q.empty()) {
            if (q.front().first == v[i]) { // 현재 Queue의 맨 앞에 있는 값이 가장 중요도가 높은 지를 확인합니다.
                if (q.front().second == p) { // m번째 값이라면 몇 번 만에 찾았는지 출력합니다.
                    cout << i + 1 << "\n";
                    break;
                }
                else {
                    q.pop();
                    i++;
                }
            }
            else { // 이 문서를 인쇄하지 않고 Queue의 맨 뒤에 넣습니다.
                q.push(q.front());
                q.pop();
            }
        }
    }
    return 0;
}
 
 

풀이:

pair과 queue를 사용하는 구현 문제 입니다.

위 두가지만 떠올린다면 풀 수 있습니다.

'백준(C, C++) > 실버' 카테고리의 다른 글

백준 1052: 물병 [C/C++]  (0) 2022.07.11
백준 23253: 자료구조는 정말 최고야  (0) 2022.07.09
백준 1158: 요세푸스 문제 [C언어]  (0) 2022.06.03
백준 1037 약수, c++  (0) 2022.06.02
백준 11659 구간 합 구하기4  (0) 2022.06.02