https://www.acmicpc.net/problem/13904
13904번: 과제
예제에서 다섯 번째, 네 번째, 두 번째, 첫 번째, 일곱 번째 과제 순으로 수행하고, 세 번째, 여섯 번째 과제를 포기하면 185점을 얻을 수 있다.
www.acmicpc.net
맥스 힙을 이용한 그리디 문제이다.
arr 배열을 1001개 만들어서 arr[마감기한].append(점수)를 해준다
이후 가장 긴 마감기한부터 짧은 마감기한까지 역순으로 for문을 돌려서 점수를 맥스 힙에 추가시켜준다
역순으로 돌리는 이유는 마감기한이 길면 마감기한이 짧은 것 처리 후에 해도 되기 때문이다.
이후 마감기한을 1씩 감소될때마다 heappop을 해서 answer를 증가시킨다.
import sys
from heapq import heappop, heappush
input = sys.stdin.readline
n = int(input())
heap = []
arr = [[] for _ in range(1001)]
m = 0
for _ in range(n):
a, b = map(int,input().split())
arr[a].append(b)
if m < a:
m = a
answer = 0
for i in range(m, 0, -1):
for x in arr[i]:
heappush(heap, -x)
if heap:
answer -= heappop(heap)
print(answer)
'백준(BOJ)' 카테고리의 다른 글
[Python/파이썬] - 백준(BOJ) 17192번 : 바둑이 포커 (0) | 2022.05.16 |
---|---|
[Java/자바] - 백준(BOJ) 16938번 : 캠프 준비 (0) | 2022.05.12 |
[Python/파이썬] - 백준(BOJ) 15683번 : 감시 (0) | 2022.05.11 |
[Python/파이썬] - 백준(BOJ) 2644번 : 촌수계산 (0) | 2022.05.11 |
[Java/자바] - 백준(BOJ) 2636번 : 치즈 (0) | 2022.05.11 |