본문 바로가기
코딩캠프

1202 보석도둑

by 코곰_ 2024. 2. 14.
// 1202 보석도둑 -> 왜 시간초과일까 ㅜ  
// heap 응용  
#include <bits/stdc++.h>

using namespace std;

int x;
int n, k;
int m, v;
int bagg;
int res = 0; 

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	
	cin >> n >> k; // 1 ~ 300,000
	
	priority_queue<pair<int, int>> pq; // 올림차순 - 최대힙  
	// val, mass 
	 

	for(int i=0; i<n; i++){
		// 무게 m과 가격 v  
		// 각 보석의 정보 m,v : 0 ~ 1,000,000
		cin >> m >> v;
		pq.push(make_pair(v, m)); // value -> mass 순	
	} 
	
	priority_queue<int> bag; 
	
	for(int i=0; i<k; i++){
	// 가방에 담을 수 있는 최대 무게 C : 1 ~ 100,000,000 
		cin >> bagg;
		bag.push(bagg);
	}
	
	// 각 가방에 보석 하나씩 배치  
	for(int i=0; i<k ;i++){
		// 무게 비교  
		while(pq.top().second > bag.top()){
			// val은 크나 mass가 커서 쓸 수 없는 경우 -> 삭제  
			pq.pop();
		}
		// mass도 범위 이내이고 val도 그 중 최대인 경우  
		
		res += pq.top().first;
		pq.pop();
		
		
	}
	cout << res;
	return 0;
}

'코딩캠프' 카테고리의 다른 글

0214 MEMO  (0) 2024.02.14
2504 괄호의 값  (0) 2024.02.14