Programmers 42587 프린터
in Algorithm
문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/42587
나의 풀이
문제에서 주어진 구조가 FIFO 구조이기 떄문에 priorities의 값을 큐에 넣는다. 이 때 요청한 문서(location 위치에 있는 문서)는 -1값으로 넣어 요청한 문서를 구분할 수 있도록하였다.
중요도가 가장 높은 문서를 모두 인쇄하기 전까지는 중요도가 더 낮은 문서는 인쇄할 수 없다. 인쇄 작업의 중요도는 1~9로만 표현되기 때문에 각각의 중요도 별 개수가 몇개인지 기록하여 높은 숫자부터 순차적으로 인쇄하며 요청한 문서를 인쇄할 수 있을 때 까지 반복한다.
풀이 코드 : 42587 프린터
#include <string>
#include <vector>
#include <queue>
using namespace std;
int solution(vector<int> priorities, int location) {
int answer = 0;
int num = priorities[location];
int exist[10] = {0,};
queue<int> q;
for(int i = 0;i<priorities.size();i++){
if(i == location)
q.push(-1);
else
q.push(priorities[i]);
exist[priorities[i]]++;
}
int max = 9;
while(!q.empty()){
if(exist[max] == 0){
max--;
}else{
if(q.front() == -1 ){
if(num == max){
answer++;
break;
}
q.pop();
q.push(-1);
}
else if(q.front() == max){
exist[max]--;
q.pop();
answer++;
}else{
q.push(q.front());
q.pop();
}
}
}
return answer;
}