Algorithm/C++ - 프로그래머스
프로그래머스 Level2 -프린터 C++
ㅇㅇ잉
2021. 3. 19. 00:27
우선순위를 넣어놓는 큐, 대기하는 큐를 선언해
비교해가면서 idx랑 location이랑 같으면 return시켜줬다.
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
|
#include <string>
#include <vector>
#include <queue>
using namespace std;
int solution(vector<int> priorities, int location) {
int answer = 0;
int cnt =0;
//우선순위 큐
priority_queue<int> pq;
//대기하는 큐
queue<pair<int,int>> q;
for(int i=0;i<priorities.size();i++){
//우선순위
pq.push(priorities[i]);
//위치랑 우선순위
q.push({i,priorities[i]});
}
while(!q.empty()){
int idx = q.front().first;
int val = q.front().second;
q.pop();
//우선순위큐에있는 순위랑 현재 값이랑 같으면
if(val==pq.top()){
pq.pop();
answer++;
if(idx==location)
break;
}else{ //아니면 대기하는 queue 뒤에 넣음
q.push({idx,val});
}
}
return answer;
}
|
cs |
근데 이제,, 다른 사람 풀이도 참고하는게 좋을 것 같다.
*max_element()를 사용해서 푸는,,
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
|
#include <string>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
int solution(vector<int> priorities, int location) {
queue<int> printer; //queue에 index 삽입.
vector<int> sorted; //정렬된 결과 저장용
for(int i=0; i<priorities.size(); i++) {
printer.push(i);
}
while(!printer.empty()) {
int now_index = printer.front();
printer.pop();
if(priorities[now_index] != *max_element(priorities.begin(),priorities.end())) {
//아닌경우 push
printer.push(now_index);
} else {
//맞는경우
sorted.push_back(now_index);
priorities[now_index] = 0;
}
}
for(int i=0; i<sorted.size(); i++) {
if(sorted[i] == location) return i+1;
}
}
|
cs |