[프로그래머스] C/C++ 프린터 lv.2 본문

알고리즘_프로그래머스/기타 문제

[프로그래머스] C/C++ 프린터 lv.2

giron 2021. 9. 17. 20:44
728x90

문제

문제 내용

해결

처음에 문제에서 말하는대로 push pop을 하면 시간초과가 날것같다고 생각해서 다른 방법을 찾아보다가. 그냥 한 번 해보자고 생각해서 문제그대로 적었다.

위치와 우선순위를 담는 pair를 만들어서 저장하고, 반복문을 돌면서 우선순위가 높은 문서가 나오면 pop하고 찾는 location이면 리턴을 해줬고, 그렇지 않다면 다시 그 값들을 그대로 push해줬다.

#include <string>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;

int solution(vector<int> priorities, int location) {
    int answer = 0;
    queue<pair<int, int>> q;// location, 순위
 
    for(int i=0; i<priorities.size(); i++){
        q.push({i, priorities[i]});
    }
    sort(priorities.begin(), priorities.end());
    
    int size = priorities.size();

    while(!q.empty()){
        int id = q.front().first;
        int rank = q.front().second;
        q.pop();
        if(rank < priorities[size-1]){
            q.push({id, rank});   
        }
        else{
            answer++;
            priorities.pop_back();
            if(id == location){
                return answer;
            }
        }
    }
    return answer;
}

연습문제는 잘 풀리는데 왜 코테만 보면....😬😓

728x90
Comments