문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/42587?language=cpp
문제 설명
1. 인쇄 대기목록의 가장 앞에 있는 문서(J)를 대기목록에서 꺼냅니다.
2. 나머지 인쇄 대기목록에서 J보다 중요도가 높은 문서가 한 개라도 존재하면 J를 대기목록의 가장 마지막에 넣습니다.
3. 그렇지 않으면 J를 인쇄합니다.
문제 입출력 예)
priorities | location | return |
[2, 1, 3, 2] | 2 | 1 |
[1, 1, 9, 1, 1, 1] | 0 | 5 |
문제 풀이
queue에 pair을 사용해서, 고유 index값으로 해당 원소가 몇번 째에
출력이 되는지 찾으려고 했다. 그 이후 우선순위 큐에 있는 최대 값과 비교해서
같은 값이라면, 출력을 시키고, 문제에서 주어진 고유 index의 값과 같은지 판단하였다.
지금 생각해보니, priority_queue를 이용해서 하는 것이 아닌 배열의 max_element로 풀 수 있었던 문제였다.
#include <string>
#include <vector>
#include <queue>
#include <iostream>
#include <algorithm>
using namespace std;
int solution(vector<int> priorities, int location) {
int answer = 0;
// 고유 index값과 value값을 받기 위한 queue
queue<pair<int,int>> q;
// 우선순위(높은값)과 비교하기 위한 pq
priority_queue<int, vector<int>> pq;
// 문제에서 주어진 값을 queue와 priority_queue에 넣어준다.
for(int i=0; i<priorities.size(); i++){
q.push(make_pair(i,priorities[i]));
pq.push(priorities[i]);
}
// 정답이 나올 때까지 반복문을 돌려준다.
while(1){
// 이번 인덱스보다 더 높은 우선순위를 가진 값이 있다면,
// 맨 뒤에 queue에 넣어준다.
if(q.front().second < pq.top()){
int index = q.front().first;
int value = q.front().second;
q.pop();
q.push(make_pair(index,value));
}
else{
// 해당 인덱스와 같은 값이라면 반복문을 빠져나온다.
if(q.front().first == location){
answer++;
break;
}else {
q.pop();
pq.pop();
answer++;
}
}
}
return answer;
}
리뷰
프로그래머스,, 하면할수록 어렵다,,
'알고리즘 공부 > 프로그래머스 [C++]' 카테고리의 다른 글
프로그래머스 : 더 맵게 [C++] (0) | 2022.11.09 |
---|---|
프로그래머스 : 땅따먹기 [C++] (0) | 2022.11.08 |
프로그래머스 : Summer/Winter Coding 소수 만들기 [C++] (0) | 2022.11.07 |
프로그래머스 : 모의고사 [C++] (0) | 2022.11.04 |
프로그래머스 : 숫자 문자열과 영단어 [C++] (0) | 2022.11.04 |
댓글