오늘은 백준 1781번 문제인 컵라면 문제를 풀었다. 각 문제마다 데드라인과 해당 문제를 해결했을 때 받을 수 있는 컵라면 수가 주어진다. 하루에 한 문제씩만 풀 수 있을 때, 가장 많은 컵라면을 얻을 수 있는 문제 조합을 구하는 것이 목표다.
문제를 해결하기 위해 그리디 알고리즘 + 최소 힙 (min-heap) 조합을 사용했다. 핵심 전략은 다음과 같다:
어떤 문제가 있었고, 나는 어떤 시도를 했는지
문제를 처음 봤을 때, 단순히 정렬해서 큰 컵라면 순서대로 풀면 될 거라 생각했는데, 데드라인 제약 때문에 단순 정렬로는 불가능하다는 걸 깨달았다.
어떻게 해결했는지
문제들을 데드라인 기준으로 정렬한 뒤, 하나씩 탐색하면서 우선순위 큐에 추가했다. 큐의 크기가 현재 문제의 데드라인보다 커지면 가장 컵라면 수가 적은 문제를 제거했다.
무엇을 새롭게 알았는지
*내일 학습할 것은 무엇인지 *
내일은 우선순위 큐를 활용한 다른 문제들을 더 풀어보고, 힙 자료구조의 활용 범위를 넓혀볼 계획이다.
import sys
import heapq
input = sys.stdin.read
data = input().split()
N = int(data[0])
assignments = []
# 입력 데이터 파싱
index = 1
for _ in range(N):
deadline = int(data[index])
cup_ramen = int(data[index + 1])
assignments.append((deadline, cup_ramen))
index += 2
# 데드라인을 기준으로 정렬
assignments.sort()
min_heap = []
for deadline, cup_ramen in assignments:
heapq.heappush(min_heap, cup_ramen)
if len(min_heap) > deadline:
heapq.heappop(min_heap)
print(sum(min_heap))
#99클럽 #코딩테스트준비 #개발자취업 #항해99 #TIL