본문 바로가기
전공 관련/알고리즘

백준 2109

by 현댕5697 2021. 5. 2.
반응형

처음에는 우선순위 큐를 사용해서 비용이 크고 기간이 짧은 강연을 먼저 고르면 될 줄 알았다.

그런데

4

5 1

10 2

20 2

10 3

이러한 예시가 들어올 경우

5 + 2 + 10 이 아니라

10 + 20 + 10 을 선택해야 했다.

왜냐하면 기간 내에 강연을 가는 것도 가능하기 때문이다.

 

그래서 아예 새로운 방법을 사용해야 했다.

1. 최대 기간 maxDate 잡기

2. 비용이 큰 순서대로 입력값 정렬하기

3. maxDate에서 하루씩 줄여가며 가능한 강연 찾기

 

위 예시에서는 maxDate = 3 이 될 것이다.

비용이 큰 순서대로 입력값을 정렬하면

[[20, 2], [10, 2], [10, 3], [5, 1]] 이 될 것이다.

그러면 3에서 부터 2, 1 와 같이 1씩 줄여가면서 해당 날짜에 가능한 강연을 검사하고, 

10 + 20 + 10 = 40 이 결과값이 된다.

 

 

예시 코드

import sys

N = int(sys.stdin.readline())
if(N == 0):
    print(0)
else:
    data = []
    for i in range(N):
        p, d = map(int, sys.stdin.readline().split())
        data.append([-p, d, True])

    data.sort(key=lambda x : x[1], reverse=True)
    maxDate = data[0][1]
    data.sort(key=lambda x : (x[0], x[1]))

    # 가능한 강연 검사
    sum = 0
    while(maxDate > 0):
        for i in range(N):
            if(data[i][1] >= maxDate and data[i][2]):
                sum -= data[i][0]
                data[i][2] = False
                break
        maxDate -= 1

    print(sum)

 

 

 

 

반응형

'전공 관련 > 알고리즘' 카테고리의 다른 글

백준 2504  (0) 2022.09.18
시간복잡도 정리  (1) 2021.09.08
백준 9663  (0) 2021.05.02
백준 2493  (0) 2021.04.26
백준 18115  (0) 2021.04.26

댓글