파이썬 문제풀이/그리드

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

ari0930 2024. 10. 24. 16:28

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

문제

n개의 대학에서 가아연 요청을 해왔다.

각 대학에서 d 일 안에 와서 강연을 해주면 p만큼의 강연료를 지불하겠다고 한다.

가장 많은 돈을 벌 수 있도록 순회강연을 하려 한다. 

하루 최대 한 곳에서만 강연을 할 수 있다.

입력

첫째 줄에 정수 n이 주어진다. 다음 n개의 줄에는 각 대학에서 제 시한 p값과 d값이 주어진다.

출력

첫번째 줄에 최대로 벌 수 있는 돈을 출력한다.

풀이

날짜와 가치가 주어지는데 , 이때 같은 날짜에 서로 다른  가격이 주어질 수 있다 그렇기에 이걸 고려해야 한다.

나는 강연료를 저장할 배열을 하나 만들어서 그 배열의 길이가 주어진 날짜보다 작다면 배열에 추가하고 만약 주어진 날짜보다 크다면 배열을 역순으로 정렬하여 가장 마지막 값하고 현재 값하고 비교하여 현재값이 더 크다면 마지막 값을 빼고 현재 값을 추가하는 식으로 풀었다.

코드

n=int(input())
array=[]
for _ in range(n):
    p,d=map(int,input().split())
    array.append([d,p])
array.sort()

ans=[]
for d,p in array:

    if len(ans)<d:
        ans.append(p)
    else:
        ans.sort(reverse=True)
        v=ans[-1]
        if v<p:
            ans.pop()
            ans.append(p)
print(sum(ans))

결과

반응형