cosmohoo
2021. 11. 28. 21:04
반응형


#include <string>
#include <vector>
#include <utility>
#include <queue>
#include <algorithm>
#include <iostream>
using namespace std;
int solution(vector<int> priorities, int location) {
int answer = 1;
queue<pair<int,int>> arr; //first : priority, second : index
priority_queue<int> priQue;
for(int i=0; i<priorities.size(); i++)
{
pair<int,int> tmp =make_pair(priorities[i], i);
arr.push(tmp);
priQue.push(priorities[i]); //자동으로 큰순으로 정렬됨
}
while(!arr.empty())
{
pair<int,int> tmp = arr.front();
arr.pop();
if(tmp.first == priQue.top())
{
if(tmp.second == location)
{
break;
}
else
{
answer++;
priQue.pop();
}
}
else
{
arr.push(tmp);
}
}
return answer;
}
=> queue와 priority queue를 사용하는 문제입니다.
=> priority를 사용하지 않을 경우 매번 지금 queue에 남아 있는 원소들 중 priority가 가장 높은 아이가 누구인지를 for문을 통해 찾아야 합니다.
=> 저는 이런방식을 사용하려 했지만, 오류가 나였으며 우선순위 큐를 사용할 경우 삽입과 삭제의 경우 항상 정렬되어있는 우선순위 큐를 사용하는 것이 좋다는 것을 알았습니다.
=> 현재 queue의 front에 있는 값과 우선순위 큐에 있는 front와 일치하며 내가 찾는 location과 일치하는 경우 while문을 나오게 됩니다.
=> 현재 queue의 front에 있는 값과 우선순위 큐에 있는 front와만 일치하는 경우 횟수를 증가시키고, queue와 우선순위 큐에서 해당 값을 pop 시킵니다.
=> 둘다 아닌 경우 queue의 front값을 pop 한 후, 다시 push 합니다.
**우선순위 큐와 HEAP의 개념을 미리 알아두면 쉽게 풀 수 있는 문제였습니다.
반응형