개인사
[G5] 백준 22252번 정보 상인 호석 C++ 우선순위 큐, 해시맵 본문
728x90

리뷰

https://www.acmicpc.net/problem/22252
해시맵과 우선순위 큐 자료구조를 혼용하여 풀이하는 문제
전역 변수
- q : 쿼리의 개수를 저장할 변수
- dic : 각 고릴라가 보유한 정보의 가치를 내림차순으로 저장할 해시맵
- ans : 총 얻게 된 정보 가치의 총합을 저장할 변수
- i : 연산 정보를 저장할 변수
- k : 추가할 정보의 개수를 저장할 변수
- c : 정보의 가치를 저장할 변수
- b : 구매할 정보의 개수를 저장할 변수
함수
없음
문제풀이
- q값을 입력 받고, q번의 쿼리를 수행한다.
- 매 쿼리마다 i, name에 값을 입력받고, 정수형 우선순위 큐 v에 dic[name]의 주소를 참조한다.
- i가 1일 경우 k에 값을 입력 받고, k번의 while루프를 수행한다. 매 루프마다 c값을 입력 받아 v에 c를 추가한다.
- i가 2일 경우 b에 값을 입력 받고, v가 비거나 b가 0이 될때까지 후위 순회하며 while루프를 수행한다.
- 매 루프마다 ans에 v의 top()요소를 더해주고, pop()처리해준다.
- 모든 쿼리를 수행한 후에 ans에 저장된 값을 출력한다.
트러블 슈팅
없음
참고 사항
- ans가 int범위를 넘어설 수 있기 때문에 long long타입으로 지정해주었다.
정답 코드
#include<iostream>
#include<queue>
#include<unordered_map>
using namespace std;
int q;
unordered_map<string, priority_queue<int>> dic;
long long ans;
int i, k, c, b;
string name;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> q;
while (q--) {
cin >> i >> name;
priority_queue<int>& v = dic[name];
if (i == 1) {
cin >> k;
while (k--) {
cin >> c;
v.push(c);
}
}
else {
cin >> b;
while (!v.empty() && b--) {
ans += v.top();
v.pop();
}
}
}
cout << ans;
}728x90
'알고리즘 공부 > C++' 카테고리의 다른 글
| [G4] 백준 19640번 화장실의 규칙 C++ 우선순위 큐, 시뮬레이션 (0) | 2025.11.16 |
|---|---|
| [G3] 백준 14621번 나만 안되는 연애 C++ 최소 스패닝 트리, MST, 크루스칼 알고리즘, 유니온 파인드 (0) | 2025.11.15 |
| [G3] 백준 12764번 싸지방에 간 준하 C++ 그리디 알고리즘, 우선순위 큐, 정렬, set (0) | 2025.11.13 |
| [P3] 백준 17407번 괄호 문자열과 쿼리 C++ 세그먼트 트리 (0) | 2025.11.12 |
| [P5] 백준 27897번 특별한 화재 경보 C++ 세그먼트 트리 (0) | 2025.11.11 |
