프린터 42587

PublicMinsu·2022년 11월 25일
0

문제

접근 방법

큐를 돌며 출력해주며 개수를 세주고 location에 해당하는 문서가 출력될 때 반환해주면 된다고 생각했다.

코드

#include <string>
#include <vector>
#include <queue>
using namespace std;

struct obj
{
    int idx;
    int num;
};
int solution(vector<int> priorities, int location)
{
    int answer = 0;
    queue<obj> q;
    priority_queue<int> pq;
    for (int i = 0; i < priorities.size(); ++i)
    {
        q.push({i, priorities[i]});
        pq.push(priorities[i]);
    }
    while (!q.empty())
    {
        obj o = q.front();
        q.pop();
        if (o.num == pq.top())
        {
            pq.pop();
            ++answer;
            if (o.idx == location)
                return answer;
        }
        else
        {
            q.push(o);
        }
    }
}

풀이

obj라는 구조체를 만들었다. 우선순위와 인덱스를 저장하기 위해 만든 것인데 다른 방법으로도 해결할 수 있다고 생각한다.
obj를 자료형으로 쓰는 큐와 int 우선순위 큐를 만들고 값을 집어넣어 줬다.
반복문을 돌며 가장 우선순위가 높은 값인지 확인하며 출력해주고 아닐 시 다시 큐에 집어넣어 순서를 유지했다.
출력하다가 인덱스와 location이 일치하면 몇 번째로 인쇄된 건지 반환해준다.

profile
연락 : publicminsu@naver.com

0개의 댓글