이번 포스팅에서는 프로그래머스 - 프린터(스택/큐)에 대해 다뤄보겠습니다.
문제 정의
접근 방법
다른 사람들의 풀이를 보면 큐를 정말 잘쓰는 것 같습니다.. 지난학기에 OS 과목을 수강하면서, 멀티 스레딩을 지원하는 IPC 통신에서 큐의 필요성에 대해 공감할 수 있었는데요! 이번에도 큐를 이용해서 코드를 짜봤습니다.
- 현재 프린터의 MAX 값과 인덱스를 찾습니다.
- 큐의
front
값을 보면서, 최대값과 다를 경우pop
한 뒤, 다시 큐의 가장 뒤로push
합니다. 큐는 FIFO 의 특성을 가지기 때문에,pop
을 하면 맨 앞의 값이 떨어져나오는 구조입니다. 만약 최대값과 같다면,pop
하고 인덱스를 벡터에 저장합니다. - MAX 값도 수정이 필요합니다. 이미 pop이 완료된 맥스 값은 -10으로 설정하여 다시 최대값으로 선택되지 않도록 했습니다.
- 최종적으로는 인덱스가 저장된 벡터와
location
의 값을 비교하여 정답을 찾습니다.
코드
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 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | #include <string> #include <vector> #include <iostream> #include <queue> using namespace std; int solution(vector<int> priorities, int location) { int answer = 0; vector<int> p; queue<int> loc; for (int i=0; i<priorities.size(); i++) { loc.push(i); } // initialize Queue queue<int> q; for (auto z : priorities) { q.push(z); } while(q.size() > 0) { // find max int maxy = -10; int idx = 0; for (int i=0; i<priorities.size(); i++) { if (priorities[i]>maxy) { maxy = priorities[i]; idx = i; } } // check if max is at front. // if not, pop it and push. // if yes, pop it, and cnt++; if (q.front() == maxy) { q.pop(); p.push_back(loc.front()); loc.pop(); // maxy is done! so change the priorities value.. priorities[idx] = -10; } else { int temp = q.front(); q.pop(); q.push(temp); int temp2 = loc.front(); loc.pop(); loc.push(temp2); } } for (int i=0; i<p.size(); i++) { if (p[i] == location) { answer = i+1; } } return answer; } | cs |
'Developer > C, C++' 카테고리의 다른 글
[C++] 프로그래머스 - 주식가격 (스택/큐) (0) | 2022.01.04 |
---|---|
[C++] 프로그래머스 - 다리를 지나는 트럭 (스택/큐) (0) | 2022.01.03 |
[C++] 프로그래머스 - 기능개발 (스택/큐) (0) | 2022.01.01 |
[C++] 프로그래머스 - 위장 (해시) (0) | 2021.12.31 |
[C++] 프로그래머스 - 베스트 앨범 (해시), sorting (0) | 2021.12.30 |
댓글