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 == location) return 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 |