1+ """
2+ # [BOJ] #1202. 보석 도둑
3+ 유형 - 그리디 , 우선큐 , 백준
4+
5+ - 가방 1개에 보석 한개
6+ """
7+ import sys
8+ from collections import deque
9+
10+ # 1, jewel , bags의 값 입력 받기
11+ total_jewels , total_bags = map (int , sys .stdin .readline ().split ())
12+ jewels = [[] for _ in range (total_jewels )]
13+ bags = [ 0 for _ in range (total_bags )]
14+
15+ for i in range (total_jewels ) :
16+ jewels [i ] = list (map (int , sys .stdin .readline ().split ()))
17+
18+ for j in range (total_bags ) :
19+ bags [j ] = int (sys .stdin .readline ())
20+
21+
22+
23+ #2. 정렬
24+ #jewel 은 비싼 가격-> 가벼운 무게 순으로 정렬
25+ # bags 은 무게가 무거운 순으로 정렬
26+ jewels = sorted (jewels , key = lambda x : ( - x [1 ] , x [0 ]))
27+ bags = sorted (bags ) # max = -1
28+
29+
30+
31+ # #3. 그리디 - 현재 가장 비싼 jewel 순으로 가장 작은 가방에서 넣기
32+ prices = []
33+
34+ for i in range (total_jewels ) :
35+ jewel_weight , jewel_price = jewels [i ]
36+ # 현재 jewel 의 무게가 최대 bags 보다 무거우면 => 끝
37+ if jewel_weight > max (bags ) :
38+ continue
39+ else : # 아니면 => 가방에 바로 넣기
40+ # jewel의 무게와 가장 가까운 fit한 최적의 bags 찾기
41+ # diff = 1000000000 ; fit_idx = -1
42+ # for k in range(len(bags)) :
43+ # curr_diff = bags[k]-jewel_weight
44+ # if curr_diff > 0 and diff > curr_diff :
45+ # diff = curr_diff ; fit_idx= k
46+
47+ for k in range (len (bags )) :
48+ if bags [k ] >= jewel_weight : # 현 jewle weight를 감당 가능한 최소 가방
49+ prices .append (jewel_price )
50+ bags .pop (k ) # 나가기
51+ break
52+ if len (bags ) == 0 : # 비어있다
53+ break # 종료
54+ # print(f"current bags {bags} : jewel {jewel_price} / {jewel_weight}")
55+ # print(prices)
56+ # print(f"price : {sum(prices)}")
57+ print (sum (prices ))
0 commit comments