본문 바로가기

PS/BaekJoon

[C++/22252] 정보 상인 호석


 단순히 기록용 입니다... 어떻게 풀었는가 생각도 다시 해보고 그러니까 아마도 도움은 안되실 것 같습니다.


이 문제는 우선순위 큐와 맵을 사용해 문제를 푸는데, 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