공부/PS (programmers)

[programmers] 프린터 / C++

happyst 2022. 5. 18. 00:35

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

 

코딩테스트 연습 - 프린터

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

programmers.co.kr

 

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

using namespace std;


int solution(vector<int> priorities, int location) {
    int answer = 0, cnt = 1;
    int sequence[110] = {0, }; // 각 문서가 프린트된 순서를 저장
    
    queue <pair<int, int>> q;
    priority_queue <int> pq;
    
    for(int i=0; i<priorities.size(); i++)
    {
        q.push({i,priorities[i]}); // index, priority
        pq.push(priorities[i]); // 중요도의 내림차순 정렬
    }
    
    while(!q.empty())
    {
        int cur_idx = q.front().first;
        int cur_priority = q.front().second;
        
        int top_priority = pq.top();
        
        q.pop();
        
        if(cur_priority >= top_priority)
        {
            pq.pop();
            sequence[cur_idx] = cnt++;
            //cout << "sequence[" << cur_idx << "] = (cnt) " << cnt << "\n";
        }
        else
        {
            q.push({cur_idx, cur_priority});
            //cout << "q.push(" << cur_idx << ", " << cur_priority << ")\n";
            //cout << "cnt = " << cnt << "\n";
        }
    }
    
    answer = sequence[location];
    return answer;
}