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