백준 1966번: 프린터 큐

Se0ng_1l·2022년 7월 16일
0

백준

목록 보기
38/40

https://www.acmicpc.net/problem/1966

📌문제 접근

1.우선순위 큐를 표현하기 위한 벡터와 클래스 활용
(우선순위 큐 STL이 있지만 이번 기회에 구현해봄)
2.우선순위 큐와 원래 입력의 큐의 가장 앞 원소들을 비교해가며 몇번째에 출력하는지 구함

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

class Info{
public:
    int idx;
    int priority;
    bool operator < (Info c)
    {
        if(this->priority < c.priority)
            return true;
        else if(this->priority == c.priority)
            if(c.idx < this->idx)
                return true;
        return false;
    }
};

int main()
{
    int cnt;
    cin >> cnt;
    int n, m, priority;
    for(int i = 0; i < cnt; i++)
    {
        queue<Info> priorityQ;
        queue<Info> q;
        vector<Info> v;
        cin >> n >> m;

        for(int j = 0; j < n; j++)
        {
            Info temp;
            cin >> priority;
            temp.priority = priority;
            temp.idx = j;
            v.push_back(temp);
            q.push(temp);
        }
        for(int j = 0; j < n - 1; j++)
            for(int k = j + 1; k > 0; k--)
            {
                if(v[k - 1] < v[k])
                    swap(v[k - 1], v[k]);
            }
        for(int j = 0; j < v.size(); j++)
        {
            priorityQ.push(v[j]);
        }

        int result = 0;
        while(!q.empty())
        {
            int idx = q.front().idx;
            int prior = q.front().priority;
            if(priorityQ.front().priority > prior)
            {
                q.push(q.front());
                q.pop();
            }
            else
            {
                result++;
                q.pop();
                priorityQ.pop();
                if(idx == m)
                {
                    cout << result << endl;
                    break;
                }
            }
        }
    }
}
profile
치타가 되고 싶은 취준생

0개의 댓글