본문 바로가기
[PS] 문제풀이/프로그래머스

[ 프로그래머스 42587 ] 프린터 (C++)

by 안산학생 2020. 3. 31.

[문제보기]

 

[해결과정]

 1. 큐(인자 2개), 우선순위 큐 생성

 2. 벡터에 있는 것들을 큐에 삽입

  -> 우선순위 큐에는 우선 순위 그대로..

  -> 큐에는 우선 순위와 초기 위치

 

3. 무한 반복문을 돌며 큐의 중요도와 우선순위 큐의 맨 앞의 중요도를 비교

  -> 만약 중요도가 같다면 pq.pop() 하고 answer++

    -> 만약 순서가 location과 같다면 break;

  -> 중요도가 다르다면 현재 a,b를 q에 다시 삽입

 

[소스코드]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
/*
    Programmers 42587 - 프린터
    Created by haejun on 2020/03/31
*/
#include <string>
#include <vector>
#include<queue>
using namespace std;
 
int solution(vector<int> priorities, int location) {
    int answer = 0;
    priority_queue <int> pq;
    queue<pair<intint>> q;
    for (int i = 0; i < priorities.size(); i++) {
        pq.push(priorities[i]);
        q.push(make_pair(priorities[i], i));
    }
 
    while (true) {
        // a == 중요도, b == 순서
        int a = q.front().first;
        int b = q.front().second;
        q.pop();
 
        if (a == pq.top()) {
            pq.pop();
            answer++;
            if (b == location) break;
        }
        else {
            q.push(make_pair(a, b));
        }
 
    }
    return answer;
}
 
 

 

[해결 과정 중 실수한 부분 / 잡담]

 pq와 q를 활용한 문제.

 함수 형식으로 되어있어서 그런지, 백준 보다 프로그래머스가 난이도가 더 높게 느껴진다.

 

[관련 문제 혹은 비슷한 문제]

 없음



댓글