

Queue자료구조를 이용하는 문제였다.
풀이
처음에 중요도 순위대로 sort 하여 내림차순으로 중요도 순위를 정렬한다.
queue에 주어진 priorities를 옮겨 담고 하나씩 꺼내서 존재하는 목록중 가장 중요한 문서인지 정렬된 벡터의 첫번째 값과 비교하여 판별한다.
중요한 문서 + location과 일치 -> 종료 (tmp반환)
중요한 문서 -> 비교하는 인덱스 업데이트 (tmp)
후순위 문서 -> q뒤에 다시 push
후순위 문서 + location과 일치 -> location을 업데이트
좀 때려맞히기로 풀어서 코드가 난잡하다.
다른 사람 풀이를 보니 인덱스 자체를 queue에 담고, max_element라는 기능을 이용해서 priorities에 존재하는 최댓값을 찾아 이용하였다. 그리고 출력하는 경우는 priorities의 해당 인덱스에 위치한 값을 0으로 업데이트 해줬다.
if(priorities[now_index] != *max_element(priorities.begin(),priorities.end()))
코드
#include <string>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
int solution(vector<int> priorities, int location) {
int answer = 0;
queue<int> q;
for(int i=0; i<priorities.size(); i++){
q.push(priorities[i]);
}
sort(priorities.begin(), priorities.end());
reverse(priorities.begin(), priorities.end());
int tmp = 0;
int l = 0;
while(true){
int a = q.front();
q.pop();
if(a==priorities[tmp]){
tmp++;
if(l==location) return tmp;
}else{
q.push(a);
if(l==location) location+=q.size();
}
l++;
}
return answer;
}