-
[Algorithm] 프로그래머스 프린터 - C++, 큐, 우선순위 큐쾌락없는 책임 (공부)/알고리즘 문제풀이 2022. 2. 26. 20:36반응형
#include <string> #include <vector> #include <queue> using namespace std; int solution(vector<int> priorities, int location) { int answer = 0; priority_queue<int> pq; queue<pair<int, int>> q; // priority, index for(int i = 0; i < priorities.size(); i++){ pq.push(priorities[i]); q.push(make_pair(priorities[i], i)); } while(!q.empty()){ int curPirority = q.front().first; int curIndex = q.front().second; q.pop(); if(curPirority == pq.top()){ pq.pop(); answer++; if(curIndex == location) break; } else{ q.push(make_pair(curPirority, curIndex)); } } return answer; }
큐를 쓰는거 같기는 했는데 어떤 식으로 변형해야할지 애매한 문제였습니다. 단일 큐를 사용하면 이게 남은 작업물들 중 어느정도의 우선순위인지를 모르고 우선순위 큐를 사용하면 location을 정렬하기가 애매했습니다.
그래서 우선순위 큐를 통해서 전체 작업물의 '우선도'를 저장해두고 큐에서 하나하나 빼보면서 비교하는 것입니다. 비교를 했을때 우선도가 같다면 이 작업물을 하는게 맞으니 출력을 하고 index 비교를 해보는 것이죠.
반응형'쾌락없는 책임 (공부) > 알고리즘 문제풀이' 카테고리의 다른 글
[Algorithm] 백준 2887 행성 터널 - C++, 크루스칼 알고리즘 (0) 2022.02.28 [Algorithm] 백준 10026 적록색약 - C++, BFS (0) 2022.02.27 [Algorithm] 프로그래머스 더 맵게 - C++, 우선순위 큐 (0) 2022.02.26 [Algorithm] 백준 1520 내리막 길 - C++ ,DFS (0) 2022.02.26 [Algorithm] 백준 2096 내려가기 - C++, DP, DFS (0) 2022.02.26