[알고리즘C++] 프린터

후이재·2020년 8월 30일
1

오늘의 문제

이 문제를 풀다가 이 방법밖에 없는것 같은데 시간초과나서 결국 찾아봤다. 우선순위큐 반가워 ㅠㅠ

프린터

나의 풀이

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

using namespace std;

bool compare(int i, int j){
    return j<i;
}

int solution(vector<int> p, int location) {
    int answer = 0;
    int size = p.size();
    priority_queue<int> pq;
    queue<pair<int, int>> q;

    for(int i=0;i<size;i++){
        pq.push(p[i]);
        q.push(make_pair(i, p[i]));
    }
    while(!q.empty()){     // 모두 pop될 때 까지
        int i = q.front().first;  // 인덱스
        int v = q.front().second; // 벨류
        
        if(v == pq.top()){ // 제일 큰 값이면
            answer ++;
            if(i == location)
                break;
            q.pop();
            pq.pop();         
        }else{             // 아니면
            q.push(q.front());
            q.pop();
        }
    }
    return answer;
}

모범 답안

#include <algorithm>
#include <string>
#include <vector>

using namespace std;

int solution(vector<int> priorities, int location) {
    int answer = 0;
    int max = *max_element(priorities.begin(), priorities.end());
    while (true)
    {
        for (int i = 0; i < priorities.size(); ++i)
        {
            if (priorities[i] == max)
            {
                ++answer;

                if (i == location)
                    return answer;

                priorities[i] = 0;
                max = *max_element(priorities.begin(), priorities.end());
            }
        }
    }
}

배울 점

  • int max = *max_element(priorities.begin(), priorities.end());
  • 이런것도 있다니!!
  • priority queue와 pair의 사용 이런게 기술이다.
profile
공부를 위한 벨로그

0개의 댓글