[백준] 2109번 순회강연 (파이썬)

dongEon·2023년 4월 10일
0

난이도 : GOLD III

문제링크 : https://www.acmicpc.net/problem/2109

문제해결 아이디어

  • 강연들을 날짜 순으로 오름차순정렬한다.
  • 강연들을 순회하면서 최소힙을 통해 값을 추가하다가 (최소힙에 들어있는 원소의 개수) > 현재 순서의 강연날짜 인 경우
  • 최소힙에 들어있는 pay 와 현재 강연의 pay를 비교해서 무엇을 버릴지 결정한다.

소스코드

import sys
import heapq

input = sys.stdin.readline

n = int(input())

arr = []

for _ in range(n):
    arr.append(list(map(int, input().split())))

arr.sort(key=lambda x: x[1])

h = []

for pay,day in arr:
    if day > len(h):
        heapq.heappush(h, pay)
    else:
        if h[0] < pay:
            heapq.heappush(h, pay)


print(sum(h))

여담

  • 다른사람의 풀이를 보다가 더욱 쉽게 표현하는 방법을 찾았다.
for pay, day in arr:
	heapq.heappush(h, pay)
    if len(h) > day:
    	heapq.heappop(h)
profile
개발 중에 마주한 문제와 해결 과정, 새롭게 배운 지식, 그리고 알고리즘 문제 해결에 대한 다양한 인사이트를 공유하는 기술 블로그입니다

0개의 댓글