문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/42628
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제 설명
이중 우선순위 큐는 다음 연산을 할 수 있는 자료구조를 말합니다.
이중 우선순위 큐가 할 연산 operations가 매개변수로 주어질 때, 모든 연산을 처리한 후 큐가 비어있으면 [0,0] 비어있지 않으면 [최댓값, 최솟값]을 return 하도록 solution 함수를 구현해주세요.
제한사항
- operations는 길이가 1 이상 1,000,000 이하인 문자열 배열입니다.
- operations의 원소는 큐가 수행할 연산을 나타냅니다.
- 원소는 “명령어 데이터” 형식으로 주어집니다.- 최댓값/최솟값을 삭제하는 연산에서 최댓값/최솟값이 둘 이상인 경우, 하나만 삭제합니다.
- 빈 큐에 데이터를 삭제하라는 연산이 주어질 경우, 해당 연산은 무시합니다.
입출력 예
입출력 예 설명
16을 삽입 후 최댓값을 삭제합니다. 비어있으므로 [0,0]을 반환합니다.
7,5,-5를 삽입 후 최솟값을 삭제합니다. 최대값 7, 최소값 5를 반환합니다.
소스코드
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> solution(vector<string> operations)
{
vector<int> answer;
vector<int> datas;
for (string temp : operations)
{
//삽입
if (temp[0] == 'I')
{
datas.emplace_back(stoi(temp.substr(2)));
}
//삭제
else if (temp[0] == 'D')
{
//비어있는 경우 예외처리
if (datas.empty() == true)
continue;
if (temp[2] == '1')
datas.erase(datas.end() - 1); //최대값 삭제
else if (temp[2] == '-')
datas.erase(datas.begin()); //최소값 삭제
}
//오름차순
sort(datas.begin(), datas.end());
}
if (datas.empty() == false)
{
answer.emplace_back(datas.back());
answer.emplace_back(datas.front());
}
else
{
answer.emplace_back(0);
answer.emplace_back(0);
}
return answer;
}
생각해 볼 다른사람 코드
#include <string>
#include <vector>
#include <set>
using namespace std;
vector<int> solution(vector<string> arguments) {
vector<int> answer;
multiset<int> que;
multiset<int>::iterator iter;
string sub;
for(auto s : arguments) {
sub =s.substr(0, 2);
if(sub=="I ") que.insert(stoi(s.substr(2,s.length()-2)));
else if(s.substr(2,1)=="1"&&que.size()>0) { que.erase(--que.end()); }
else if(que.size()>0) { que.erase(que.begin()); }
}
if(que.size()==0) { answer.push_back(0); answer.push_back(0); }
else {
iter = --que.end(); answer.push_back(*iter);
iter = que.begin(); answer.push_back(*iter);
}
return answer;
}
생각해 볼 것
처음엔 우선순위큐 ASC DSC를 선언하여 관리해야겠다 생각했다만, 최대값 최소값만 삭제가능하면 되니 vector로 사용했는데 생각보다 괜찮았다 생각한다.
다른 사람은 multiset를 사용했는데 아직 set이 익숙하지 않아서 그런지 생각이 미처 들지 못했다. set공부 하자.
728x90
'개발 > 프로그래머스' 카테고리의 다른 글
완전탐색 > 모의고사 (Level1) (0) | 2021.11.02 |
---|---|
정렬 > H-Index (Level 2) (0) | 2021.11.02 |
정렬 > 가장 큰 수 (Level2) (0) | 2021.11.02 |
정렬 > K번째수 (Level1) (0) | 2021.11.02 |
힙(Heap) > 디스크 컨트롤러 (Level3) (0) | 2021.11.02 |
힙(Heap) > 더 맵게 (Level2) (0) | 2021.10.30 |
스택/큐 > 주식가격 (Level2) (0) | 2021.10.30 |
스택/큐 > 다리를 지나는 트럭 (Level2) (0) | 2021.10.30 |
댓글