[알고리즘] BOJ 1781 컵라면

김상현·2022년 4월 12일
0

알고리즘

목록 보기
70/301
post-thumbnail

[BOJ] 1718 컵라면 바로가기

📍 문제

상욱 조교는 동호에게 N개의 문제를 주고서, 각각의 문제를 풀었을 때 컵라면을 몇 개 줄 것인지 제시 하였다. 하지만 동호의 찌를듯한 자신감에 소심한 상욱 조교는 각각의 문제에 대해 데드라인을 정하였다.

문제 번호123456
데드라인113322
컵라면 수672145

위와 같은 상황에서 동호가 2, 6, 3, 1, 7, 5, 4 순으로 숙제를 한다면 2, 6, 3, 7번 문제를 시간 내에 풀어 총 15개의 컵라면을 받을 수 있다.

문제는 동호가 받을 수 있는 최대 컵라면 수를 구하는 것이다. 위의 예에서는 15가 최대이다.

문제를 푸는데는 단위 시간 1이 걸리며, 각 문제의 데드라인은 N이하의 자연수이다. 또, 각 문제를 풀 때 받을 수 있는 컵라면 수와 최대로 받을 수 있는 컵라면 수는 모두 231보다 작거나 같은 자연수이다.


📍 입력

첫 줄에 숙제의 개수 N (1 ≤ N ≤ 200,000)이 들어온다. 다음 줄부터 N+1번째 줄까지 i+1번째 줄에 i번째 문제에 대한 데드라인과 풀면 받을 수 있는 컵라면 수가 공백으로 구분되어 입력된다.


📍 출력

첫 줄에 동호가 받을 수 있는 최대 컵라면 수를 출력한다.


📍 풀이

✍ 코드

import heapq
from sys import stdin
N = int(stdin.readline())
lst = []
result = []
for _ in range(N):
  deadline, ramen = map(int,stdin.readline().split())
  lst.append((deadline, ramen))
lst.sort()
for dr in lst:
  heapq.heappush(result,dr[1]) # 힙에 라면 갯수 추가
  if len(result) > dr[0]: # 만약 deadline 보다 현재 힙의 원소가 많다면
    heapq.heappop(result) # 힙의 원소 중 가장 작은 원소 제거
print(sum(result))
profile
목적 있는 글쓰기

0개의 댓글