코딩 테스트/C++

프로그래머스, C++) Lv 2. 프로세스

나무늘보섬 2025. 11. 4. 16:13

문제

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

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

 

같은 우선 순위의 값들을 구분하기 위해 queue를 pair<int, int>의 형태로 생성해 index까지 저장하게 함.

priority_queue를 통해 우선순위가 가장 큰 것을 설정 - top에 접근

더보기

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

#include <iostream>
using namespace std;

/*
Location의 해당하는 프로세스가 실행되는 순서는 무엇인가

priorities가 큰 순서로 실행됨.
*/

int solution(vector<int> priorities, int location) {
    queue<pair<int,int>> q;
    priority_queue<int> pq;
    for (int i = 0; i < (int)priorities.size(); ++i) {
        q.push({priorities[i], i});
        pq.push(priorities[i]);
    }
    int order = 0;
    while (!q.empty()) {
        auto [pri, idx] = q.front(); q.pop();
        if (pri == pq.top()) {
            pq.pop();
            ++order;
            if (idx == location) return order;
        } else {
            q.push({pri, idx});
        }
    }
    return -1; // 이론상 도달 X
}