프로그래머스/Level_2

[프로그래머스 / Level_2 / C++ ] 프린터

배발자 2022. 3. 28.
반응형

Queue를 응용해서 String의 substr 를 활용했다. 

 

#접근방법 

 

문제를 잘 읽어보면 중요도는 1~9까지 표현가능하다고 했다. 

그렇기 때문에 찾고자 하는 location위치의 우선순위 값을 res_num이라는 변수에 따로 빼놓고 

해당 위치의 우선순위 값을 0으로 수정한다. 

 

그리고 priorities 벡터를 오름차순으로 정렬한 뒤, 

뒤에서부터 찾는다. 

 

1. 우선순위가 가장 높은 것을 탐색하는데 가장 높은 우선순위가 아니면 지나간다. 

2. 만약 우선순위 가장 높은 것을 탐색했으면 그 값을 기준으로 자르고 왼쪽 문자열과 오른쪽 문자열을 위치를 바꾼다. 

3. 만약 찾고자하는 location의 값을 만나게 된다면 그 즉시 cnt를 반환한다. ( cnt는 문자열을 자른 횟수)

 

#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int solution(vector<int> priorities, int location) {
    string q = ""; 
    int res_num = priorities[location]; 
    for(int i=0; i<priorities.size(); i++){
        if(i==location)q+='0';  
        else q+='0'+priorities[i];         
    }
    sort(priorities.begin(), priorities.end()); 
    int cnt =1; 
    for(int i=priorities.size()-1; i>=0; i--){
        char c = priorities[i]+'0'; 
        for(int j=0; j<q.size(); j++){
            if(q[j]=='0'&&priorities[i]==res_num){
                return cnt; 
            }
            else if(q[j]==c){
                string s= q.substr(0, j); 
                q = q.substr(j+1); 
                q+=s; 
                break; 
            }
        }
        cnt++;       
    }   
}
 

코딩테스트 연습 - 프린터

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

programmers.co.kr

 

반응형

댓글