JB의 이모저모

[BOJ 13904 🥇3] 과제 (Python) 본문

알고리즘/백준

[BOJ 13904 🥇3] 과제 (Python)

J B 2023. 9. 23. 22:35

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

 

13904번: 과제

예제에서 다섯 번째, 네 번째, 두 번째, 첫 번째, 일곱 번째 과제 순으로 수행하고, 세 번째, 여섯 번째 과제를 포기하면 185점을 얻을 수 있다.

www.acmicpc.net

문제

웅찬이는 과제가 많다. 하루에 한 과제를 끝낼 수 있는데, 과제마다 마감일이 있으므로 모든 과제를 끝내지 못할 수도 있다. 과제마다 끝냈을 때 얻을 수 있는 점수가 있는데, 마감일이 지난 과제는 점수를 받을 수 없다.

웅찬이는 가장 점수를 많이 받을 수 있도록 과제를 수행하고 싶다. 웅찬이를 도와 얻을 수 있는 점수의 최댓값을 구하시오.

입력

첫 줄에 정수 N (1 ≤ N ≤ 1,000)이 주어진다.

다음 줄부터 N개의 줄에는 각각 두 정수 d (1 ≤ d ≤ 1,000)와 w (1 ≤ w ≤ 100)가 주어진다. d는 과제 마감일까지 남은 일수를 의미하며, w는 과제의 점수를 의미한다.

출력

얻을 수 있는 점수의 최댓값을 출력한다.

예제 입력 1

7
4 60
4 40
1 20
2 50
3 30
4 10
6 5

예제 출력 1

185

 

⭕ CODE

import heapq

n = int(input())

arr = []

for _ in range(n):
	# a : 마감일까지 남은 일수
    # b : 과제 점수
    a,b = map(int,input().split())
    arr.append([a,b])

# 마감일이 낮은거 부터 조사해야하므로 정렬
arr.sort()

result = []

for i in range(n):
	# 우선순위 큐에 arr[i][1] 즉 과제 점수를 넣어준다
    heapq.heappush(result,arr[i][1])
	# arr[i][0] : 마감일까지 남은 일수
    # 마감일까지 남은 일수가 result길이보다 짧다면
    # 마감일을 넘은거므로
    if arr[i][0] < len(result):
    	# 작은값부터 빼준다.
        heapq.heappop(result)
# 모든 과제 점수를 더해준다
print(sum(result))

✏️ Comment

https://jun-bae.tistory.com/44 와 동일한 문제

 

[BOJ 1781🥇2] 컵라면 (Python)

https://www.acmicpc.net/problem/1781 1781번: 컵라면 상욱 조교는 동호에게 N개의 문제를 주고서, 각각의 문제를 풀었을 때 컵라면을 몇 개 줄 것인지 제시 하였다. 하지만 동호의 찌를듯한 자신감에 소심

jun-bae.tistory.com