문제
programmers.co.kr/learn/courses/30/lessons/42587
코드
int solution(vector<int> priorities, int location) {
int answer = 0;
priority_queue<int> pri_q;
queue<pair<int, int>> que;
for(int i = 0;i<priorities.size();++i)
{
pri_q.push(priorities[i]);
que.push(make_pair(i,priorities[i]));
}
while (!que.empty())
{
if(que.front().second == pri_q.top())
{
if(que.front().first == location)
return answer + 1;
else
{
answer++;
que.pop();
pri_q.pop();
}
}
else
{
que.push(que.front());
que.pop();
}
}
return answer;
}
int main(void)
{
vector<int> a = {1, 1, 9, 1, 1, 1};
cout << solution(a, 0);
}
큐와 우선순위 큐를 사용하였다. priority_queue는 데이터를 자동으로 정렬해준다. 인자로 들어온 priorities를 priority_que에 넣어주어 정렬된 값으로 저장하고, queue에는 index와 함께 priorities를 저장해주었다. 이 때, pair 클래스 개념을 사용하였다.
for(int i = 0;i<priorities.size();++i)
{
pri_q.push(priorities[i]);
que.push(make_pair(i,priorities[i]));
}
pair 클래스
- make_pair
- first
- second
위 세가지 개념만 알면 사용할 수 있다❗️❗️데이터를 '쌍'으로 표현할 때 사용한다. make_pair로 저장할 때 묶어주고, 접근할 때에는 first와 second를 사용하면 된다.
우선 첫번째로 que의 second데이터와 pri_q의 top을 비교해준다. pri_q는 내림차순으로 숫자가 정렬되어 있기 때문에, top에는 가장 큰 숫자가 들어있다.
que의 second데이터(priorities)와 pri_q가 같지 않다면 해당 데이터보다 우선순위가 높은 데이터가 존재한다는 뜻이다. 따라서 해당 데이터의 front를 먼저 push해준 다음에 pop을한다.
que의 second데이터(priorities)와 pri_q가 같다면 해당 데이터는 우선순위가 가장 높은 데이터이다. 이 때, que의 first데이터(index)가 location과 다르다면 answer는 ++해주고, que와 pri_q에 있는 데이터를 모두 pop해준다. (pop하는 과정은 우선순위가 높은 데이터를 프린트 했다고 생각하면 된다🧐) que의 first데이터(index)가 location가 같다면, 해당 데이터는 인쇄를 요청한 데이터이기 때문에 answer에 +1을 하면서 return 해주면 된다.
while (!que.empty())
{
if(que.front().second == pri_q.top())
{
if(que.front().first == location)
return answer + 1;
else
{
answer++;
que.pop();
pri_q.pop();
}
}
else
{
que.push(que.front());
que.pop();
}
}
while문이 끝났지만 해당 함수를 탈출하지 못한 경우는 location이 주어진 데이터의 수보다 클때, 또는 주어진 벡터에 데이터가 없을 때이다.
'알고리즘 문제 > C++' 카테고리의 다른 글
[프로그래머스] Level2 : 다리를 지나는 트럭 - C++ (2) | 2020.12.20 |
---|---|
[프로그래머스] Level2 : 기능개발 - C++ (0) | 2020.12.19 |
[백준] 9012번 : 괄호 - C++ (0) | 2020.12.17 |
[프로그래머스] Level2 : 최댓값과 최솟값 - C++ (0) | 2020.07.10 |
[프로그래머스] Level2 : 스킬트리 - C++ (0) | 2020.07.10 |