Notice
Recent Posts
Recent Comments
Link
나의 개발일지
[백준] 1202 보석 도둑 [Python, 파이썬] 본문
- 문제 : https://www.acmicpc.net/problem/1202
- 🔑 힙, 우선순위 큐
- 1. 입력받은 보석들을 무게 기준 오름차순 정렬
- 2. 가방도 오름차순 정렬
- 3. 가장 작은 가방부터 시작해서 이 가방에 담을 수 있는 보석이면 힙에 보석 가격을 담는다. (음수로 담는다. 최대힙)
- 4. 담긴 보석이 있으면 가장 비싼 보석을 선택한다.
- 3, 4번 과정을 가방 개수만큼 반복한다.
- 크기가 작은 가방부터 담기 때문에 보석을 모두 담고 뽑아내는 게 가능하게 된다.
- 크기가 2인 가방에 담을 수 있는 보석이면 크기가 3인 가방에도 담을 수 있다.
- 가방 크기 = [2, 10]
- 보석 = [(1, 65), (2, 99), (5, 23)]
- 가방 크기 2일 때 힙 = [-99, -65]
- -99를 뽑아서 정답으로 올리면 힙에 [-65] 남음
- 가방 크기 10일 때 힙 = [-65, -23]
- -65를 뽑아서 정답으로 올린다.
- 이런 프로세스를 거친다.
from heapq import heappop, heappush
import sys
input = sys.stdin.readline
n, k = map(int, input().split())
jewelry = []
for _ in range(n):
m, v = map(int, input().split())
jewelry.append((m, v))
bag = [int(input()) for _ in range(k)]
jewelry.sort() # 무게 오름차순 정렬
bag.sort() # 가방 크기 오름차순 정렬
idx, answer = 0, 0
price = [] # 보석 가격 담을 힙
for b in bag:
while idx < len(jewelry) and b >= jewelry[idx][0]: # i번 가방에 담을 수 있는 보석 다 담기
heappush(price, -jewelry[idx][1])
idx += 1
if price: # 담은 보석이 있으면 가장 비싼 보석을 선택
answer += -heappop(price)
print(answer)
'백준' 카테고리의 다른 글
[백준] 1541 잃어버린 괄호 [Python, 파이썬] (0) | 2024.01.10 |
---|---|
[백준] 2307 도로검문 [Python, 파이썬] (1) | 2024.01.09 |
[백준] 1874 스택 수열 [Python, 파이썬] (0) | 2024.01.05 |
[백준] 1414 불우 이웃 돕기 [Python, 파이썬] (2) | 2024.01.03 |
[백준] 1922 네트워크 연결 [Python, 파이썬] (1) | 2024.01.03 |
Comments