최대 1 분 소요

Question

Result


Solution

  • queue에 문서들의 <중요도, idx>를 순서대로 넣는다.
  • q.front가 최댓값이 아니라면 맨뒤로 보내고,
    최댓값이면 q.pop하고 vector에 q.front.second에 있는 idx를 push한다.
  • q.empty가 되면 모두 정렬이 완료 된것이고 vector에 저장된 idx값과 location이 같은 것을 찾아 i+1을 출력한다.

Cord

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

using namespace std;

int solution(vector<int> priorities, int location)
{
    int answer = 1;
    int size = priorities.size();
    vector<int> result;
    queue<pair<int, int>> q;

    // q에 순서대로 (중요도, idx) 넣기
    for (int i = 0; i < size; ++i) { q.push({ priorities[i], i }); }

    // 최댓값
    int max = *max_element(priorities.begin(), priorities.end());

    while (!q.empty())
    {  
        pair<int, int> temp = q.front();
        int importance = temp.first;

        // 최댓값 보다 작으면 q에서 맨뒤로 보내기
        if (importance < max) { q.pop(); q.push(temp); }

        // 최댓값과 같거나 같으면 stack에 넣고 q에서 빼내기, 최댓값 갱신
        else
        {
            result.push_back(temp.second);
            priorities.erase(max_element(priorities.begin(), priorities.end()));
            if(!priorities.empty()) max = *max_element(priorities.begin(), priorities.end());
            q.pop();
        }
    }

    // location의 순서 출력
    for (int i = 0; i < result.size(); ++i)
    {
        if (result[i] == location) { answer = i + 1; }
    }

    return answer;
}

Result

Q