[프로그래머스 C++] 이중우선순위큐
[프로그래머스 C++] 이중우선순위큐
https://school.programmers.co.kr/learn/courses/30/lessons/42628
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
해결전략
덱 deque
우선순위큐 priority_queue
정답코드 - deque 사용
#include <iostream> #include <string> #include <vector> #include <deque> #include <algorithm> using namespace std; vector<int> solution(vector<string> oper) { vector<int> answer; deque<int> dQ; for (int i = 0; i < oper.size(); i++) { if (oper[i][0] == 'I') { int num = stoi(oper[i].substr(2)); // 문제에서 주어진 숫자 int 변환 dQ.push_back(num); sort(dQ.begin(), dQ.end()); // deque 퀵정렬 } else if (oper[i][0] == 'D') { if (oper[i][2] == '1') { if (!dQ.empty()) dQ.pop_back(); } else if (oper[i][2] == '-') { if (!dQ.empty()) dQ.pop_front(); } } } if (dQ.empty()) { answer.emplace_back(0); answer.emplace_back(0); } else { answer.emplace_back(dQ.back()); answer.emplace_back(dQ.front()); } return answer; }

정답코드 - priority_queue 사용
#include <iostream> #include <string> #include <vector> #include <queue> using namespace std; vector<int> solution(vector<string> oper) { vector<int> answer; priority_queue<int> pQ; // 내림차순 priority_queue<int, vector<int>, greater<int>> revpQ; // 오름차순 for (int i = 0; i < oper.size(); i++) { if (oper[i][0] == 'I') { // 삽입 int num = stoi(oper[i].substr(2)); // 숫자 추출 pQ.push(num); revpQ.push(num); } else if (oper[i][0] == 'D') { // 삭제 if (oper[i][2] == '1') { if (pQ.empty()) continue; if (!revpQ.empty() && pQ.top() == revpQ.top()) revpQ.pop(); // 최대 힙과 최소 힙의 최댓값이 같다면 최소 힙에서도 제거 pQ.pop(); } else if (oper[i][2] == '-') { if (revpQ.empty()) continue; if (!pQ.empty() && pQ.top() == revpQ.top()) pQ.pop(); // 최소 힙과 최대 힙의 최솟값이 같다면 최대 힙에서도 제거 revpQ.pop(); } } if (pQ.top() < revpQ.top()) // 만약 최대 힙의 최댓값이 최소 힙의 최솟값보다 작다면 { while (!pQ.empty()) pQ.pop(); while (!revpQ.empty()) revpQ.pop(); } } if (pQ.empty() || revpQ.empty()) { answer.emplace_back(0); answer.emplace_back(0); } else { answer.emplace_back(pQ.top()); answer.emplace_back(revpQ.top()); } return answer; }
'⭐ 코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 C++] 네트워크 (1) | 2024.06.15 |
---|---|
[프로그래머스 C++] 단어 변환 (0) | 2024.06.14 |
[프로그래머스 C++] [PCCP 기출문제] 2번 / 석유 시추 (0) | 2024.06.11 |
[프로그래머스 C++] 택배 배달과 수거하기 (0) | 2024.06.10 |
[프로그래머스 C++] 양궁대회 (0) | 2024.05.14 |
댓글
이 글 공유하기
다른 글
-
[프로그래머스 C++] 네트워크
[프로그래머스 C++] 네트워크
2024.06.15 -
[프로그래머스 C++] 단어 변환
[프로그래머스 C++] 단어 변환
2024.06.14[프로그래머스 C++] 단어 변환 https://school.programmers.co.kr/learn/courses/30/lessons/43163 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 해결전략 깊이우선탐색 DFS 정답코드 #include #include #include #include using namespace std;int answer = 987654321;int n; // 단어의 개수int len; // 단어의 길이vector ch; // 각 단어의 방문 여부를 저장할 벡터bool canChange(const string& str1,… -
[프로그래머스 C++] [PCCP 기출문제] 2번 / 석유 시추
[프로그래머스 C++] [PCCP 기출문제] 2번 / 석유 시추
2024.06.11 -
[프로그래머스 C++] 택배 배달과 수거하기
[프로그래머스 C++] 택배 배달과 수거하기
2024.06.10
댓글을 사용할 수 없습니다.