https://school.programmers.co.kr/learn/courses/30/lessons/42587
queue에 index를 채워넣는다.
priorities의 원소중 max값을 구한다.
while을 돌리면서 큐의 맨 앞값과 max를 비교한다.
max보다 작으면 맨 앞의 원소를 맨 뒤로 보낸다.
max와 같다면 그 index가 location과 같은지 체크하고 아니면
priorities[index]의 값을 0으로 바꾸고 다시 max를 갱신한다.
count++하고 큐에서 pop한다.
#include <string>
#include <vector>
#include <algorithm>
#include <queue>
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(i);
int max = *max_element(priorities.begin(), priorities.end());
int count = 1;
while(1)
{
int num = q.front();
if(priorities[num] < max)
{
q.push(num);
q.pop();
}
else
{
if(num == location)
return count;
priorities[num] = 0;
max = *max_element(priorities.begin(), priorities.end());
count++;
q.pop();
}
}
return answer;
}
#include <string>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
int solution(vector<int> priorities, int location) {
queue<int> printer; //queue에 index 삽입.
vector<int> sorted; //정렬된 결과 저장용
for(int i=0; i<priorities.size(); i++) {
printer.push(i);
}
while(!printer.empty()) {
int now_index = printer.front();
printer.pop();
if(priorities[now_index] != *max_element(priorities.begin(),priorities.end())) {
//아닌경우 push
printer.push(now_index);
} else {
//맞는경우
sorted.push_back(now_index);
priorities[now_index] = 0;
}
}
for(int i=0; i<sorted.size(); i++) {
if(sorted[i] == location) return i+1;
}
}
실행 된 프로세스들을 따로 vector에 모은다.
vector에서 location과 같은 원소를 찾아서 그 인덱스를 +1 하여 리턴한다.