알고리즘/프로그래머스

[프로그래머스] 프린터

lheunoia 2022. 2. 17. 19:04

 

 

 

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

 

코딩테스트 연습 - 프린터

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

programmers.co.kr

 

 

 

 

이번 문제는 큐(Queue) 문제였습니다.

 

 

 

 

 

《문제 풀이》

 

1. 문서의 중요도와 각 문서의 인덱스를 큐 q에 삽입

2. 문서의 중요도를 판별하기 위해 우선순위 큐 pq에 문서의 중요도 삽입

3. 현재 문서의 중요도가 가장 높다면 인쇄 ← print++

     ☛ 이 때, 현재 문서가 내가 요청한 문서의 대기 목록 위치라면 반복문 종료 ⭐️ (시간 초과 문제로 꼭 해주어야 해요!)

 

 

 

 

 

《C++ 코드》

 

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

using namespace std;

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

 

 

 

 

 

프로그래머스 - 정답 화면

 

 

 

 

반응형