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;
}