티스토리 뷰

반응형

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️⃣ 보석 리스트 gem에 (무게, 가치)를 담아준다.

 

2️⃣ bag 값을 담아주고 정렬해준다.

 

3️⃣ 임시 배열인 temp를 만들어 허용 가능한 보석을 계속 넣어주고 그중 값어치 나가는 보석을 pop

 

4️⃣ pop한 값을 result 변수에 더해주고 마지막으로 result 출력

 

 


 

⊙ 문제 풀이

 

import sys
import heapq

N, K = map(int, sys.stdin.readline().split())
gem = []
bag = []

for _ in range(N):
    heapq.heappush(gem, list(map(int, sys.stdin.readline().split())))

for _ in range(K):
    bag.append(int(input()))

bag.sort()

result = 0

temp = []

for b in bag:
    while gem and b >= gem[0][0]:
        x,y = heapq.heappop(gem)
        heapq.heappush(temp,-y)

    if temp:
        result -= heapq.heappop(temp)

print(result)

 


⊙ 결과

 


⊙ 마무리

 

 

NONE

 

 

좋아요는 로그인하지 않아도 누를 수 있습니다!

728x90
반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함