[Python] 백준 1202번: 보석 도둑

Jonie Kwon·2022년 4월 28일
0

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

풀이

코테 스터디 1주차 문제로 게임아이템 문제가 나왔는데 풀다보니 유형이 똑같아서 놀랐다. 한 문제를 푸니까 두 문제가 풀리는 기적.. 게임아이템 풀다가 안풀려서 백준으로 간거였는데ㅎㅎ

오름차순 정렬로 가방을 정렬한다. 가방에 넣을 수 있는 모든 보석을 takes에 넣는다.
takes에 들어있는 보석들 중 가장 가치가 큰 걸로 챙긴다.
이미 정렬이 되어있으므로 이전 순회에서 takes에 들어간 보석은 다음 순회에서 무조건 가져갈 수 있다. <<- 이부분 때문에 오래 걸렸다 ㅠ.ㅠ

코드

import sys
import heapq
input = sys.stdin.readline
n, k = map(int,input().split())
shop = []
for _ in range(n):
    m, v = map(int,input().split())
    heapq.heappush(shop, (m, v))
bags = [int(input()) for _ in range(k)]
bags.sort()
answer= 0
takes = []
for bag in bags:
    while shop:
        if bag >= shop[0][0]:
            weight, value = heapq.heappop(shop)
            heapq.heappush(takes, -value)
        else:
            break
    if takes:
        answer+= -heapq.heappop(takes)
    elif not shop:
        break
print(answer)
profile
메모하는 습관

0개의 댓글