Programmers algorithm 문제 : 프린터 본문
문제를 읽었을때 우선순위를 사용하므로 큐를 사용해야 한다.
인쇄 작업 방식을 그대로 구현하되, 내가 인쇄를 요청한 문서가 어디에 있는지, 몇번째에 프린트 되는지, 가장 높은 우선순위를 가졌는지 판단해야 한다.
loacation 변수를 계속 변화하게 될 경우 구현이 복잡해 질 것 같아 pair를 사용해서 내가 인쇄 요청한 작업을 표시했고, 따로 함수를 만들어 내 작업이 가장 높은 우선순위를 가졌는지 판단했다.
<전체 소스코드>
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>
using namespace std;
bool checker(vector<int> prio, int check){
int max = 0;
for(int i = 0; i<prio.size(); i++){
if(prio[i]>max)
max = prio[i];
}
if(check == max)
return true;
else
return false;
}
vector<int> remover(vector<int> prio, int val){
for(int i = 0; i<prio.size(); i++){
if(prio[i] == val){
prio[i] = 0;
break;
}
}
return prio;
}
int solution(vector<int> priorities, int location) {
int answer = 0;
queue<pair<int, bool>> q;
for(int i = 0; i<priorities.size(); i++){
if(i == location)
q.push(make_pair(priorities[i],true));
else
q.push(make_pair(priorities[i],false));
}
while(!q.empty()){
pair<int, bool> fr = q.front();
if(checker(priorities, fr.first) == true){ // 내가 대빵일때
q.pop();
priorities = remover(priorities, fr.first);
answer++;
if(fr.second == true)
break;
}
else{ // 나보다 큰 애가 있을 경우
q.pop(); //일단 빼고
q.push(fr);// 뒤에 다시 삽입
}
}
return answer;
}
|
cs |
'Programmers_algorithm' 카테고리의 다른 글
Programmers algorithm 문제 : 기능개발 (0) | 2022.03.08 |
---|
Comments