⛔ 단순히 기록용 입니다... 어떻게 풀었는가 생각도 다시 해보고 그러니까 아마도 도움은 안되실 것 같습니다.
이 문제는 우선순위 큐와 맵을 사용해 문제를 푸는데, Input 조건을 잘 봐야했습니다.
무엇이 문제냐, Q가 100,000개이고, 만약 갖고 있는 정보의 가치가 전부 100,000이라면? 그 개수의 합은 얼마가 될까? 당연히 인트로 10,000,000,000 을 잡을 수 있을까요? long long으로 변환을 해서 문제를 해결할 수 있습니다.
정답 코드는 이렇습니다. 그래도 map에 priority_queue도 넣어보고 아주 재미난 문제여서 작성해봅니다. 그리고 우선순위 큐는 기본적으로 내림차순을 갖고있기 때문에, 오름 차순을 하고자 한다면? -를 넣어서 바꿔주던지 아니면 greater였나.. 그걸 사용해서 해결하면 됩니다.
#include<iostream>
#include<queue>
#include<map>
using namespace std;
long long answer = 0,n,order,jewel;
string name;
map<string, priority_queue<int> > m;
void solve(int type) {
if(type == 1){
cin >> name >> jewel;
int number;
for(int i = 0; i < jewel; i++) {
cin >> number;
m[name].push(number);
}
} else if(type == 2){
cin >> name >> jewel;
while(jewel--){
if(m[name].empty()) break;
answer += m[name].top();
m[name].pop();
}
}
}
int main() {
cin >> n;
for(int i = 0; i < n; i++) {
cin >> order;
solve(order);
}
cout <<answer;
return 0;
}
'PS > BaekJoon' 카테고리의 다른 글
[C++/1239] 차트 (0) | 2024.07.17 |
---|---|
[C++/9519] 졸려 (0) | 2024.07.17 |
[C++/27438] 행렬 연산 (0) | 2024.07.10 |
[C++/26168] 배열 전체 탐색하기 (0) | 2024.07.04 |
[C++/18115] 카드놓기 (0) | 2024.07.04 |