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

 

코딩테스트 연습 - 프린터

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

programmers.co.kr

코드 설명

 

priorities배열에 따라 큐에 전부 넣어준후 뒤쪽을 전부 탐색한다.

중요도가 큰게있다면 뒤로 넣어주고 priorities 배열 자체도 바꿔준다.(문제를 더 단순하게)

또한, 큐에 담아줄때는 pair를 이용하여 각각의 원래 location 위치를 달아주고 수정한다.

 

문제에서 요구한 answer++ 시점을 잘 잡아주자 ! 여기서 실수발생

 

 

 

코드

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

int solution(vector<int> priorities, int location) {
    int answer = 0;
    queue<pair<int,int>> q;
    
    for(int i=0;i<priorities.size();i++){
        q.push({priorities[i],i}); //이름표마냥 location값 붙여두기
    }
    
    while(!q.empty()){
        bool flag=false;
        int a=q.front().first;
        
        for(int i=0;i<priorities.size();i++){
            if(a < priorities[i]){
                flag=true;
                break;            
            }
            
        }

        if(flag==true){ // 뒤쪽에 중요도 큰게 있음
            q.push({q.front().first,q.front().second});
            q.pop();
            int temp=priorities[0];
            priorities.erase(priorities.begin());
            priorities.push_back(temp);
            
            
        }
        else{ // 뒤쪽에 중요도 큰게 없음 
            answer++;
            if(q.front().second == location ){
                break;
            }
            
            q.pop();
            cout << priorities[0] << " " ;
            priorities.erase(priorities.begin());
            
        }
        
        
        
    }
    
    
    
    return answer;
}

+ Recent posts