배움 저장소
[프로그래머스] 이중우선순위큐 C++ 본문
programmers.co.kr/learn/courses/30/lessons/42628
priority queue 2개로 풀어도 되지만 make_heap을 사용하면 하나로 풀 수 있다.
비교 연산자 역할을 하는 smaller와 bigger는 lambda로 대신해도 된다. 다만 자주 사용하기 때문에 비효율적이다.
extractMax 와 extractMin을 함수를 둘 다 만들지 않고 함수 포인터를 parameter로 넘겨 코드 수를 줄일 수 있었다.
bool smaller(int a, int b){ return a>b; }
bool bigger(int a, int b){ return a<b; }
int extract(vector<int>& v, bool(*compare)(int,int)){
make_heap(v.begin(),v.end(),compare);
pop_heap(v.begin(), v.end(),compare);
int temp = v.back();
v.pop_back();
return temp;
}
vector<int> solution(vector<string> operations) {
vector<int> v;
for(string s:operations){
int temp = stoi(s.substr(2));
if(s[0]=='I'){ v.push_back(temp); }
else if(s[0]=='D' && !v.empty()){
if(temp == 1 ){ extract(v,bigger); }
else if( temp == -1 ) { extract(v,smaller); }
}
}
vector<int> answer;
if(!v.empty()){ answer.push_back(extract(v,bigger)); }
else { answer.push_back(0); }
if(!v.empty()){ answer.push_back(extract(v,smaller)); }
else { answer.push_back(0); }
return answer;
}
'PS > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 큰 수 만들기 C++ (0) | 2021.04.10 |
---|---|
[프로그래머스] 체육복 C++ (0) | 2021.04.10 |
[프로그래머스] 디스크 컨트롤러 C++ (0) | 2021.04.10 |
[프로그래머스] 더 맵게 C++ (0) | 2021.04.10 |
[프로그래머스] 기능개발 C++ (0) | 2021.04.10 |
Comments