코테 준비-문제풀기

프로그래머스 - 프린터 c++

FireStone 2020. 7. 29. 20:21

https://programmers.co.kr/learn/courses/30/lessons/42587

 

코딩테스트 연습 - 프린터

일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린��

programmers.co.kr

문제가 누가봐도 큐를 사용해서 풀어야하는 문제였다.

- vector의 max_element를 잘 사용하면 빠르게 풀리는 문제였다.

-*max_element를 사용하면 max값을, max_element를 이용하면 max의 index를 얻어올 수 있다.

max를 찾을때마다 그 index에 대한 값을 -1로 바꿔주면서 남은 것들의 max값을 찾아갔다.

-que는 location비교를 위해 pair<int,int> 형식으로 저장해주었다.

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

using namespace std;

int solution(vector<int> priorities, int location) {
    int answer = 0;
    int num;
    int num_index;
    int max_index;
    int index=0;
    queue<pair<int,int>> que;
    for(int i=0;i<priorities.size();i++){
        que.push(make_pair(index+i,priorities[i]));
    }
    while(!que.empty()){
         num=que.front().second;
        num_index=que.front().first;
        if(num==*max_element(priorities.begin(),priorities.end())){
            max_index=max_element(priorities.begin(),priorities.end())-priorities.begin();
            priorities[max_index]=-1;
            que.pop();
            answer++;
            if(num_index==location){
                return answer;
            }
        }
        else{
            que.pop();
            que.push(make_pair(num_index,num));
        }
    }
  
    
    return answer;
}