프로그래머스 42587 - 프린터
문제 링크
생각과 접근
사족
본론
queue< pair<int, int> > q;
- 큐를 사용해서 문제를 풀었다.
- 큐를 pair를 이용해서 왼쪽에는 index, 오른쪽에는 priorities[index]를 저장하였다.
- 무한루프
- J에 해당하는 것
q.front()
을 pop한다. (편의상 J라고 부르겠음.)
- J를 제외한 큐를 순회해서 J의 우선순위보다 높은 원소를 찾는다.
- 우선순위가 높은 원소가 없다면, J를 인쇄해야 한다.
- 문제의 답은 location에 해당하는 문서의 인쇄 순서를 찾는 것이므로, J의 인덱스와 location이 일치하는지 확인한다.
- 일치한다면, 답을 찾은 것이므로
return answer;
- 일치하지 않는다면, 아무것도 하지 않는다. (이미 J는 pop 되었기 때문에 추가적인 작업이 필요하지 않는다.)
- 우선순위가 높은 원소가 있다면, J를 큐의 가장 마지막에 넣어야 한다.
- 우선순위가 높은 원소가 있다는 것을 flag에 저장하였음
- 큐 순회가 끝나고 나면 J를 push한다.
코드
#include <bits/stdc++.h>
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(make_pair(i, priorities[i]));
}
while(-1){
bool flag = true;
int idx = q.front().first;
int pri = q.front().second;
q.pop();
int size = q.size();
for(int i = 0; i < size; i++){
int _idx = q.front().first;
int _pri = q.front().second;
q.pop();
if(pri < _pri){
flag = false;
}
q.push(make_pair(_idx, _pri));
}
if(flag == false){
q.push(make_pair(idx, pri));
}
else{
answer++;
if(idx == location){
return answer;
}
}
}
}
채점 결과