[C++] 프로그래머스 Level 2 : 프린터

Kim Nahyeong·2022년 9월 23일
0

프로그래머스

목록 보기
27/38

#include <iostream>
#include <string>
#include <vector>
#include <queue>
#include <utility> // pair

using namespace std;

queue<pair<int, int> > q; // 중요도, 순서
priority_queue<int> order; // 순서

int solution(vector<int> priorities, int location) {
    int answer = 0;
    
    for(int i = 0; i < priorities.size(); i++){
        q.push({priorities[i], i}); // 큐는 push_back X
        order.push(priorities[i]); // 중요도 순서 저장
    }
    
    while(!q.empty()){
        int prio = q.front().first; // 큐 제일 앞
        int loc = q.front().second;
        
        int orderPrio = order.top(); // priority queue는 top
        
        q.pop();
        
        if(orderPrio == prio){
            answer++; // 출력
            order.pop();
            if(loc == location){
                break; // if문 안에 if문을 뒀어야...
            }
        } else {
            q.push({prio, loc});
        }
    }
    
    return answer;
}

은근 쉬웠는데 너무 어렵게 생각해서 좀 헤맸다.

if 문 안에 if 문을 작성해서 해당 프린트보다 우선순위인 프린트가 없을 때 location이 같으면 출력해주면 되었는데 혼자 무슨 && 쓰고 쌩쇼했었다... 왜 굳이 그랬었지 이해가 안간다.

아무튼 해결!

0개의 댓글