Algorithm/백준

[백준 알고리즘] 1202번: 보석 도둑 (Python)

에릭 Kim 2023. 8. 23. 14:33
반응형

https://www.acmicpc.net/problem/1202

 

1202번: 보석 도둑

첫째 줄에 N과 K가 주어진다. (1 ≤ N, K ≤ 300,000) 다음 N개 줄에는 각 보석의 정보 Mi와 Vi가 주어진다. (0 ≤ Mi, Vi ≤ 1,000,000) 다음 K개 줄에는 가방에 담을 수 있는 최대 무게 Ci가 주어진다. (1 ≤ Ci

www.acmicpc.net

 

소스코드

 

 

풀이

★ 보석 가격의 합을 최대한으로 하기 위해서는 우선순위 큐의 최대힙, 최소힙을 모두 이용해야 합니다. 

 

★ 입력받은 보석의 정보를 무게를 기준으로 최소힙 형태로 만들어줍니다. 

 

★ 입력받은 가방의 무게는 오름차순 정렬해주는데, 그 이유는 가방의 무게보다 작거나 같은 보석 무게 중 최댓값이 필요하기 때문입니다.  예를 들어

 

보석 무게 = [1,30] , [2,65], [5,45] 

가방의 무게 = 10, 2

 

오름차순 정렬되지 않은 채로 보석의 무게대로 가방에 넣으면, 10 가방에는 보석의 가치 중 최댓값인 [2,65]가 들어가고, 2가방에는 [1,30]이 들어가게 되면서 보석 가격 합은 95가 됩니다.

하지만 오름차순으로 정렬한 뒤 넣어보면, 2 가방에는 [2,65], 10 가방에는 [5,45]를 넣을 수 있기에 보석 가격의 합이 110이 됩니다 ! 

 

★ 위의 방법을 토대로 가방에 넣을 수 있는 보석을 찾을 때는 최소힙을, 넣은 보석들 중 최대 가치를 찾을 때는 최대힙을 사용하여 답을 구해줍니다 :) 

반응형