Programmers_프린터

한상현·2021년 6월 13일
0

Algorithm

목록 보기
17/33

음 개인적으로 너무 쉬웠다. 문제를 풀고 다른 사람의 풀이를 보면 max element라는 요소를 사용했는데, 이러면 모든 부분에서 최댓값을 찾아 비교해야 하지 않나?? 라는 생각을 했다.

  • 필자는 우선순위 큐를 사용하여 최댓값을 갱신시켜줬다. 우선순위 큐를 사용해도 되지만 일반 vector를 사용하여 내림차순 정렬 을 시켜줘도 괜찮을 것이라고 본다.
  • 전체 문서에서 지금 앞에있는 문서보다 우선순위가 높은 문서가 존재하면 앞의 문서를 뒤로 보내줘야 하기 때문에 queue를 사용해줬다.
  • 또한 전체 문서에서 우선순위가 높은 문서가 있는지를 확인하기 위해 priority_queue를 사용.
  • 만약 우선순위 큐top()값과 front()값이 같다면 의 값을 빼준다. 만약 자기가 찾는 값이라면 break
  • 필자는 pair 값으로 순서와 값을 함께 넣어줬다.

💻 전체 코드

#include <string>
#include <vector>
#include <queue>

using namespace std;

int solution(vector<int> priorities, int location) {
    int answer = 0;
    queue<pair<int,int>>q;
    priority_queue<int>pq;
    
    for(int i=0;i<priorities.size();i++)
    {
        pq.push(priorities[i]);
        q.push({priorities[i],i});
    }
    
    
    while(!q.empty())
    {
        if(q.front().first==pq.top())
        {
            answer++;
            if(location == q.front().second) break;
            else{
                q.pop();
                pq.pop();
            }
        }
        else
        {
            q.push({q.front().first, q.front().second});
            q.pop();
        }
    }
    return answer;
}

q 값에 굳이 priorities[i] 값을 집어넣지 않고 index 값만 넣어줘도 된다... 다른 사람의 풀이를 보고 깨달음..

profile
의 공부 노트.

0개의 댓글

관련 채용 정보