[프로그래머스/C++] 프로세스(프린터)

다곰·2023년 6월 16일
0

우당탕탕 코테준비

목록 보기
56/98

✅ LV.2

✏️ 최종 솔루션

  1. 인쇄물 큐에 인쇄물 우선순위와 vector 인덱스를 쌍으로 저장
  2. 우선순위 큐에 인쇄물 우선순위 별도 저장
  3. 모두 인쇄할 때까지 큐를 돌면서 현재 최고 우선순위가 현재 인쇄물의 우선순위라면 프린트하고 아니면 다시 큐에 넣어줌
    1) 프린트할 때는 우선순위 큐의 우선순위도 pop 해서 후순위 탐색 가능하도록 하고 answer++
    2) locatin 과 현재 프린트할 인덱스가 같다면 return 값 찾은 것이기 때문에 return

📌 self feedback

모든 인쇄물에 대한 우선순위를 저장하는 큐와 인쇄 대기 큐를 따로 관리하는 것이 관건이었음
같은 우선순위라면 처음 인쇄 순서대로 순차 출력하는 것이 아니라 우선순위가 높은 인쇄물이 나오기 전까지는 계속 뒷 순서로 빼줘야하기 때문에 순서가 계속해서 갱신되는 방식이므로 인쇄물을 우선순위 큐로만 관리하면 우선순위에 따라서만 인쇄 순서가 결정되기 때문에 부적합

✏️ 최종 code

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

using namespace std;

struct process {
    int prio;
    int idx;
};

int solution(vector<int> priorities, int location) {
    int answer = 0;
    queue<process> 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()) {
        if(q.front().prio==pq.top()) {
            answer++;
            if(q.front().idx==location) break;
            q.pop();
            pq.pop();
        }
        else {
            q.push(q.front());
            q.pop();
        }
    }
    
    return answer;
}
profile
다교미의 불꽃 에러 정복기

0개의 댓글