-
프로그래머스 이중순위우선큐 C++프로그래머스(Programmers) 2022. 1. 26. 23:02반응형
입출력 예
operations return
["I 16","D 1"] [0,0] ["I 7","I 5","I -5","D -1"] [7,5] 입출력 예 설명
16을 삽입 후 최댓값을 삭제합니다. 비어있으므로 [0,0]을 반환합니다.
7,5,-5를 삽입 후 최솟값을 삭제합니다. 최댓값 7, 최솟값 5를 반환합니다.#include <string> #include <vector> #include <queue> #include <iostream> #include <algorithm> using namespace std; vector<int> solution(vector<string> operations) { vector<int> answer; vector<int> doublePq; for(string s : operations) { string sPart = s.substr(2); int tmp = stoi(sPart); if(s[0] == 'I') //숫자삽입 { doublePq.push_back(tmp); sort(doublePq.begin(), doublePq.end()); //오름차순 } else//삭제하는 경우 { if(doublePq.size() == 0) continue; if(tmp == 1) //최대값 삭제 { doublePq.erase(doublePq.begin() + (doublePq.size()-1)); } if(tmp == (-1) ) //최소값 삭제 { doublePq.erase(doublePq.begin()); } } } if(doublePq.empty()) { answer.push_back(0); answer.push_back(0); } else { answer.push_back(doublePq.back()); answer.push_back(doublePq.front()); } return answer; }
=> HEAP에 포함되어있는 문제이길래 maxHeap과 minHeap을 사용해서 풀려다가 더 간단한 방법을 생각해보았습니다.
=> vector를 이용하는 방법입니다.
=> 'I'인 경우무조건 값을 PUSH_BACK 합니다. 이후 sorting을 합니다.
(해당 단계에서 시간초과가 뜰 줄 알았는데 뜨지 않았습니다.)
=> 'D'인경우 '1'인 경우 max값을, '-1'인 경우 min값을 제거해주었습니다.
(이미 sorting되어있는 vector이므로 정렬순서에 따라 맨 앞과 맨뒤를 빼주면 됩니다.)
* 이부분에서 vector의 <begin(), end()> 와 <front(), back()> 이 '포인터'와 '값'을 나타내는 것을 염두에 두어야 합니다.
반응형'프로그래머스(Programmers)' 카테고리의 다른 글
프로그래머스 순위검색 C++ (0) 2022.02.14 프로그래머스 2016년 C++ (0) 2022.02.04 프로그래머스 행렬 테두리 회전하기 C++ (0) 2022.01.21 예산 (0) 2022.01.21 신고 결과 받기 C++ (0) 2022.01.17