본문 바로가기

알고리즘 풀이/프로그래머스

스택/큐 - 프린터

https://www.welcomekakao.com/learn/courses/30/lessons/42587#

 

위 문제를 푸는 데 아래 로직을 구현하였다.

 

1. queue (13 line) 에 프린터 대기목록을 저장한다.
2. 우선순위 소팅이 적용되지 않은 queue 를 순회하며, 최대 우선순위를 가진 프린터를 찾고 정보를 저장한다.
3. 2번에서 찾은 정보를 기반으로 우선순위 정렬 (35~40 line)을 하는 데, 이 정보를 vector (20 line) 에 저장한다.

 

그리고 위 처럼 문제를 풀지 않고, maxHeap 을 사용해도 문제를 풀 수 있을 것 같다. 나중에 시간되면 해보기로..

 

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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <string>
#include <vector>
#include <queue>
#include <utility>
#include <algorithm>
#include <iostream>
 
using namespace std;
 
int solution(vector<int> priorities, int location) {
    int answer = 0;
    // pair -> [index, value(priority)]
    queue <pair<int, int>> q;
    int size = priorities.size();
    
    int testValue = 1;
    
    for (int i = 0; i < size; ++i) q.push({i, priorities[i]});
    while (true) {
        vector <pair<int, int>> v;
        while (!q.empty()) {
            v.push_back({q.front().first, q.front().second});
            q.pop();
        }
        
        int maxPrioirty = v[0].second;
        int maxPriorityIndex = 0;
        for (int i = 0; i < size; ++i) {
            if (maxPrioirty < v[i].second) {
                maxPriorityIndex = i;
                maxPrioirty = v[i].second;
            }
        }
 
        for (int i = maxPriorityIndex; i < size ; ++i) {
            q.push({ v[i].first, v[i].second });
        }
        for (int i = 0; i < maxPriorityIndex ; ++i) {
            q.push({ v[i].first, v[i].second });
        }
        
        answer++;
            
        pair<int, int> p = q.front();
        if (p.first == locationreturn answer;
 
        q.pop();
        size--;
    }
        
    return answer;
}
cs

 

'알고리즘 풀이 > 프로그래머스' 카테고리의 다른 글

스택/큐 - 주식가격  (0) 2019.07.05
스택/큐 - 기능개발  (0) 2019.07.04
스택/큐 - 탑  (0) 2019.07.04
스택/큐 - 다리를 지나는 트럭  (0) 2019.07.02
스택/큐 - 쇠막대기  (0) 2019.07.01