레야몬
[C++] 7662번 이중 우선순위 큐 - 우선순위 큐, 트리 본문
결과적으론 나는 이 문제를 푸는 데 실패하였고 더 이상 C언어로 알고리즘 코드를 짜는 것은 힘들다고 생각하였다. 그래서 C언어에서 C++언어로 바꾸기로 하였고 코드는 다른 사람의 블로그에서 가져왔다. 그대로 가져왔고 내가 짠 코드는 절대 아니다.
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <map>
using namespace std;
priority_queue<int, vector<int>, greater<int>> min_pq;
priority_queue<int, vector<int>, less<int>> max_pq;
map<int, int> dict;
int T, k, n;
char c;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
cin >> T;
while (T) {
while (!min_pq.empty()) {min_pq.pop();}
while (!max_pq.empty()) {max_pq.pop();}
dict.clear();
cin >> k;
for (int i=0; i<k; i++) {
cin >> c >> n;
if (c=='I') {
min_pq.push(n);
max_pq.push(n);
if (!dict.count(n))
dict[n]=1;
else
dict[n]++;
}
else {
if (n==1) {
while (!max_pq.empty() && !dict[max_pq.top()])
max_pq.pop();
if (!max_pq.empty()) {
dict[max_pq.top()]--;
max_pq.pop();
}
}
else {
while (!min_pq.empty() && !dict[min_pq.top()])
min_pq.pop();
if (!min_pq.empty()) {
dict[min_pq.top()]--;
min_pq.pop();
}
}
}
}
while (!max_pq.empty() && !dict[max_pq.top()])
max_pq.pop();
while (!min_pq.empty() && !dict[min_pq.top()])
min_pq.pop();
if (max_pq.empty() || min_pq.empty())
cout << "EMPTY\n";
else
cout << max_pq.top() << " " << min_pq.top() << "\n";
T--;
}
return 0;
}
나는 C++언어를 접한 것이 이번이 처음이기 때문에 이 코드를 이해하는데 상당히 많은 시간을 썼다. 링크는 아래에 있다.
<코드 출처>
백준 7662번 이중 우선순위 큐 - C++(cpp) 풀이
문제 제목에서부터 알 수 있듯이 우선순위 큐를 써야 하는데, 스위프트에는 라이브러리로 우선순위 큐를 제공하지 않아서 C++로 풀었다. 1. 최댓값은 최댓값 큐에서 찾는다. 2. 최솟값은 최솟값
please-amend.tistory.com
<switch문 컴파일 에러>
https://blankspace-dev.tistory.com/386
[C++] switch case문 jump to case label 오류 문제 해결 방법
switch case 문을 사용하다보면 아래와 같은 에러가 발생할 경우가 있다. 1 error: jump to case label [-fpermissive] cs 처음에는 이것에 대해서 이해할 수가 없었는데, 찾아보니 굉장히 간단한 문법 오류..
blankspace-dev.tistory.com
<C++ 큐>
https://life-with-coding.tistory.com/408
[C++][STL] Queue 기본 사용법 및 예제
인트로 안녕하세요. 오늘은 C++의 STL중 하나인 Queue(큐) 기본 함수에 대해서 알아보도록 하겠습니다. Queue 는 자료구조의 대표적인 FIFO(First In First Out)인 알고리즘으로, 코딩테스트에 많이 나오는
life-with-coding.tistory.com
<C++ 벡터>
https://blockdmask.tistory.com/70
[C++] vector container 정리 및 사용법
안녕하세요. BlockDMask 입니다. 오늘은 C++ STL의 sequence container 중에 정말 자주 쓰는 vector에 대해서 알아보겠습니다. <목차> 1) vector container 란? 2) vector의 사용 3) vector의 생성자와 연산..
blockdmask.tistory.com
<C++ greater, less>
[STL] less, greater, plus, minus 예제
[STL] less, greater, plus, minus 예제 STL 에는 유용하게 사용할 수 있는 함수 객체가 내장돼 있다. less : 첫번째 인자가 두번째 인자보다 작으면 true 반환 (bool) greater : 첫번째 인자가 두번째 인자보다..
xzio.tistory.com
<C++ map>
https://life-with-coding.tistory.com/305
[C++][STL] map 사용법 정리
인트로 안녕하세요. 오늘은 C++ STL 연관 컨테이너 중 하나인 map에 대해 알려드리겠습니다. 목차 1) Map이란? 2) Map 기본 형태 3) Map 정렬 4) Map 사용방법 - 헤더 포함 - map 선언 - search : map에서 데이터..
life-with-coding.tistory.com
<ios_base::sync_with_stdio>
C++ 레퍼런스 - ios_base::sync_with_stdio 함수
modoocode.com
<C++ cin, cout>
https://coding-factory.tistory.com/479
[C++] 입력문 / 출력문 (cin, cout) 사용법 & 예제
C언어에서는 에 있는 scanf, printf를 통해서 입출력문을 사용합니다. 물론 C++에서도 scanf, printf를 통해서 입력, 출력을 할수도 있지만 C++의 표준 입력 및 출력은 cin, cout를 사용합니다. std 네임스페
coding-factory.tistory.com
<cin.tie(NULL)>
sync_with_stdio(false) cin.tie(NULL) cout.tie(NULL)
C++ 입출력 속도 C++의 cin과 cout은 scanf와 printf보다 속도가 느리다. 출력은 큰 차이는 아니지만 입력같은 경우는 2배 이상의 속도 차이가 난다.
ip99202.github.io
<C++ auto>
https://dydtjr1128.github.io/cpp/2019/06/04/Cpp-auto.html
C++ auto란? - dydtjr1128's Blog
auto? 1. Intro C++ 표준에 기록되어 있는 auto라는 키워드는 원래 의미와 수정된 의미가 정의되어 있다. C++11전에는 auto는 자동 저장소 클래스에...
dydtjr1128.github.io
<C++ priority_queue>
[C++ STL] Priority_queue 사용법
본 글은 여러 PS 문제를 접하다 보면 우선순위 큐를 적극적으로 사용해야 되는 경우가 있는데 매번 구글링을 하게 되는 것 같아 우선순위 큐에 대한 기본적인 사용법뿐만 아니라 기본적인 자료
kbj96.tistory.com
※현재 고등학교 등교중인 학생입니다. 이제 알고리즘을 본격적으로 공부하기 시작해서 아직 초보입니다. 혹시 제가 잘못 알고있는 점이나 더 좋은 풀이 방법이 있어 댓글에 남겨주시면 감사히 하나하나 열심히 읽어보겠습니다. 좋아요, 단순한 댓글 한마디라도 저에겐 큰 힘이 됩니다! 감사합니다.
'알고리즘 > 백준' 카테고리의 다른 글
[C++] 11399번 ATM - 정렬 (0) | 2022.08.30 |
---|---|
[C++언어] 11279번 최대 힙 - 우선순위 큐 (0) | 2022.08.29 |
[C언어] 9095번 1, 2, 3 더하기 - DP (0) | 2022.08.29 |
[C언어] 7576번 토마토 - 그래프 이론, BFS (0) | 2022.08.26 |
[C언어] 2630번 색종이 만들기 - 분할 정복, 재귀 (0) | 2022.08.26 |