- 이중우선순위큐
이중 우선순위 큐는 다음 연산을 할 수 있는 자료구조를 말합니다.
명령어수신 탑(높이)I 숫자 | 큐에 주어진 숫자를 삽입합니다. |
D 1 | 큐에서 최댓값을 삭제합니다. |
D -1 | 큐에서 최솟값을 삭제합니다. |
이중 우선순위 큐가 할 연산 operations가 매개변수로 주어질 때, 모든 연산을 처리한 후 큐가 비어있으면 [0,0] 비어있지 않으면 [최댓값, 최솟값]을 return 하도록 solution 함수를 구현해주세요.
제한사항- operations는 길이가 1 이상 1,000,000 이하인 문자열 배열입니다.
- operations의 원소는 큐가 수행할 연산을 나타냅니다.
- 원소는 “명령어 데이터” 형식으로 주어집니다.- 최댓값/최솟값을 삭제하는 연산에서 최댓값/최솟값이 둘 이상인 경우, 하나만 삭제합니다.
- 빈 큐에 데이터를 삭제하라는 연산이 주어질 경우, 해당 연산은 무시합니다.
["I 16","D 1"] | [0,0] |
["I 7","I 5","I -5","D -1"] | [7,5] |
16을 삽입 후 최댓값을 삭제합니다. 비어있으므로 [0,0]을 반환합니다.
7,5,-5를 삽입 후 최솟값을 삭제합니다. 최대값 7, 최소값 5를 반환합니다.
문제를 풀었는데 이게 맞다 싶다.
너무 어거지로푼거같아서 다른사람들 답을 봐도 비슷비슷해보인다.
뭐지...
이렇게하면 시간이 뻑나지 않을까 걱정했는데 그렇게 타이트하지는 않은 것 같다.
vector를 선언해서 그냥 insert할때마다 정렬해주는 아주 간단하면서도 미친 방법을 사용했다.
최대값 최솟값은 최대한 계산을 줄이기 위해서 최솟값일때는 [0]을 int의 대충 큰값으로 해두었고,
최댓값은 그냥 pop_back했다.
이게 맞나 싶다 풀어도
거참...
priority_queue두개만들어서 지지고 볶고 하다가 이건 정말 아닌거같아서 미친척하고 제출한건데 되니까 황당하다.
++multiset이라는거도 있구나
https://blockdmask.tistory.com/80
이거좀 봐봐야겠다.
[C++] multiset container 정리 및 사용법
안녕하세요 ! BlockDMask 입니다. 오늘은, 연관 컨테이너(set, multiset, map, multimap)중 multiset 에 대해서 알아보겠습니다.! set과 구별되는 multiset의 가장 큰 특징은 key값이 중복된다는 것 입니다. 나머..
blockdmask.tistory.com
#include <string>
#include <vector>
#include <iostream>
#include <queue>
#include <algorithm>
using namespace std;
vector<int> solution(vector<string> operations) {
vector<int> answer;
vector<int> task;
char sw;
int tmp,start = 0;
for(auto K:operations){
sw = K[0];
tmp = stoi(K.substr(2));
if(K[0] == 'I') {
task.push_back(tmp);
sort(task.begin(),task.end());
for(int i=0;i<start;i++){task.pop_back();}
start = 0;
}
else{
if(K[2] == '1'){if(!task.empty()) task.pop_back();}
else{
if(task.size()>start){
task[start] = 210000000;
start++;
}
}
}
}
if(task.empty()){
return {0,0};
}
sort(task.begin(),task.end());
for(int i=0;i<start;i++){task.pop_back();}
return {task.back(),task[0]};
}
'프로그래머스' 카테고리의 다른 글
[프로그래머스][c++][완전탐색] 소수 찾기(dfs) (0) | 2022.01.30 |
---|---|
[프로그래머스][c++][완전탐색] 모의고사 (0) | 2022.01.28 |
[프로그래머스][c++][힙(heap)] 디스크 컨트롤(priority_queue) (0) | 2022.01.28 |
[프로그래머스][c++][힙(Heap)] 더 맵게(priority_queue) (0) | 2022.01.26 |
[프로그래머스][c++][정렬] H-Index (0) | 2022.01.26 |