문제
마감기한 안에 과제를 하루에 하나씩 할 수 있을 때, 최대 점수를 구하라
다른분 코드 보고 플옸다...
하루에 하나씩 풀되, 높은 점수인 거만 고르면 되는 줄 알았는데
기한이 빠른 걸 하는 게 중요한 게 아니고 점수가 높은걸 해야하는 거였다.
예를 들어,
마감기한, 점수할당
1 10
3 30
3 30
3 50
으로 주어졌을 때, 1인 것부터 하는 게 아니라 3인거 3개로 채워야 함.
따라서 value로 sorting 해서 꺼내는 게 포인트였다. 어떤 분은 마감기한 끝 부터 하던데, 이 풀이가 더 의도에 부합하는 것 같다.
나는 while day 로 풀다가 실패했는데, 이 방식으로도 다시 풀어봐야겠다.
<틀린 거>
import sys
sys.stdin = open('.//그리디//input3.txt','rt')
import heapq
# 7
# 4 60
# 4 40
# 1 20
# 2 50
# 3 30
# 4 10
# 6 5
n = int(input())
graph = []
limit = 0
for _ in range(n):
d,w = map(int, input().split())
graph.append([-w,d,w])
limit = max(limit, d)
# graph.sort(key=lambda x : (x[0], x[1]), reverse=True)
heapq.heapify(graph)
print(graph)
day = limit
# done = [0]*1001
done = [0]*(limit+1)
score = 0
while day != -1 and graph:
order,d,w = heapq.heappop(graph)
for i in range(d,0,-1):
if done[i] ==0 :
done[i] = w
break
day -= 1
print(sum(done))
<최종>
import sys
import heapq
n = int(input())
graph = []
limit = 0
for _ in range(n):
d,w = map(int, input().split())
graph.append([-w,d,w])
# graph.sort(key=lambda x : (x[0], x[1]), reverse=True)
heapq.heapify(graph)
done = [0]*1001
score = 0
while graph:
order,d,w = heapq.heappop(graph)
for i in range(d,0,-1):
if done[i] == 0 :
done[i] = w
break
print(sum(done))
* 참고
https://jokerldg.github.io/algorithm/2021/06/10/assignment.html
'⚡️algorithm' 카테고리의 다른 글
[이분탐색] 백준 2512. 예산 (0) | 2022.05.13 |
---|---|
[이분탐색] 백준 2805. 나무자르기 (2) | 2022.05.13 |
[그리디] 백준 1700. 플러그 (0) | 2022.05.11 |
[그리디, 파이썬] 백준 11000. 강의실 배정 (0) | 2022.05.10 |
[그리디, 파이썬] 백준 1931. 회의실배정 (0) | 2022.05.10 |