Skip to content

Commit d3659bc

Browse files
committed
[BOJ]#1202. 보석도둑/골드2/힌트
https://www.acmicpc.net/problem/1202
1 parent 948661b commit d3659bc

File tree

1 file changed

+57
-0
lines changed

1 file changed

+57
-0
lines changed

Hongjoo/백준/보석도둑.py

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
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

Comments
 (0)