1966번 - 프린터 큐(c++)

Duna·2020년 10월 23일
0

🗒 1966번 문제

📌 문서의 순서를 Queue로 나타내자 ❗️

1️⃣ 여러 개의 문서가 FIFO-First In First Out에 따라 인쇄가 되기에 Queue를 사용하자 

2️⃣ queue와 priority_queue를 함께 사용해서 중요도에 따라 인쇄 순서가 바뀔 수 있도록 하기

3️⃣ priority_queue는 들어간 순서와 상관없이 높은 숫자 순서로 숫자를 저장해 둠

4️⃣ 이 점을 이용해서 중요도에 맞춰서 문서를 pop시키고 궁금한 문서가 몇 번째로 인쇄되는지 출력받기


➰ 코드로 나타낸 17608번 ➰

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

int main() {
    int testCase = 0;
    int count = 0;
    int documentNum, docuPosition, important;
    
    cin >> testCase;
    
    // testCase의 수만큼 loop 진행
    for (int i = 0; i < testCase; i++) {
        count = 0;
        cin >> documentNum >> docuPosition;
        // 문서 수와 궁금한 문서 위치 받기
        
        queue<pair<int, int>> queue;
        priority_queue<int> priorityQueue;
        // queue와 우선 순위 queue
        
        for (int j = 0; j < documentNum; j++){
            cin >> important;
            queue.push({j, important});
            priorityQueue.push(important);
        }
        // 중요도를 받고 queue에 넣기
        
        // queue가 빌 때까지 while문 돌리기
        while (!queue.empty()) {
            int k = queue.front().first;
            int v = queue.front().second;
            // queue에서 들어간 것 중 1, 2번째 거를 k, v에 return
            
            queue.pop();
            
            // 2번째가 priorityQueue의 top과 동일하면 pop시키고 count세기
            if(priorityQueue.top() == v) {
                priorityQueue.pop();
                count++;
                // 전에 pop된 요소가 궁금한 문서라면 몇번이나 count했는지 print
                if(k == docuPosition) {
                    cout << count << endl;
                    break;
                }
            } else {
            	// 아니면 다시 queue 뒤로 넣기
                queue.push({ k, v});
            }
        }
    }
}
profile
더 멋진 iOS 개발자를 향해

0개의 댓글