https://www.acmicpc.net/problem/2109
2109번: 순회강연
한 저명한 학자에게 n(0 ≤ n ≤ 10,000)개의 대학에서 강연 요청을 해 왔다. 각 대학에서는 d(1 ≤ d ≤ 10,000)일 안에 와서 강연을 해 주면 p(1 ≤ p ≤ 10,000)만큼의 강연료를 지불하겠다고 알려왔다.
www.acmicpc.net
그리디 문제입니다.
만약에 날짜가 겹친다면
가격을 더 쌘데 부르는 곳을 가야합니다.
이 문제는 우선순위 큐로 풀 수 있었습니다.
q에 페이를 넣어주되
현재 날짜가 q보다 크면
q의 가장 작은 값을 pop해줍니다.
예를들면
1 20
1 100 이렇게 들어왔다고 치면
1 100을 넣으면
q가 20 100 이렇게 2개가 됩니다.
그런데 day==1이므로 q의 길이가 이보다 더 큽니다.
그래서 pop을 해주면 자연스럽게
100만 남게되는 식입니다.
직접 코드로 보겠습니다.
#백준 2109번 순회강연
from heapq import heappop,heappush
N=int(input())
times=[]
for _ in range(N):
p,d=map(int,input().split())
times.append([d,p])
times.sort()
money=0
q=[]
for day,pay in times:
heappush(q,pay)
if day<len(q):
heappop(q)
print(sum(q))
우선순위 큐를 이용할 수 있는 문제.
그리디 알고리즘에 대한 이해와 더불어서
어떻게 큐를 쓸지 공부할 수 있는 좋은 문제입니다.
[백준 2026번] 소풍(파이썬) (1) | 2022.09.21 |
---|---|
[백준 18500번] 미네랄2(파이썬) (0) | 2022.09.21 |
[백준 2141번] 우체국(파이썬) (0) | 2022.09.20 |
[백준 18224번] 미로에 갇힌 건우(파이썬) (0) | 2022.09.19 |
[백준 11967번] 불켜기(파이썬) (0) | 2022.09.19 |
댓글 영역
Tabris4547님의
글이 좋았다면 응원을 보내주세요!
이 글이 도움이 됐다면, 응원 댓글을 써보세요. 블로거에게 지급되는 응원금은 새로운 창작의 큰 힘이 됩니다.
응원 댓글은 만 14세 이상 카카오계정 이용자라면 누구나 편하게 작성, 결제할 수 있습니다.
글 본문, 댓글 목록 등을 통해 응원한 팬과 응원 댓글, 응원금을 강조해 보여줍니다.
응원금은 앱에서는 인앱결제, 웹에서는 카카오페이 및 신용카드로 결제할 수 있습니다.