본문 바로가기
코딩테스트

[백준][파이썬]14501번: 퇴사

by 과아아앙 2021. 5. 13.

문제 출처 : https://www.acmicpc.net/problem/14501

 

14501번: 퇴사

첫째 줄에 백준이가 얻을 수 있는 최대 이익을 출력한다.

www.acmicpc.net

내 풀이

n = int(input())

t_list = []
p_list = []
answer = [0] * (n + 1)

for i in range(n):
    t, p = map(int, input().split())
    t_list.append(t)
    p_list.append(p)

for i in range(n - 1, -1, -1):
    if t_list[i] + i > n:
        answer[i] = answer[i + 1]
    else:
        answer[i] = max(p_list[i] + answer[i + t_list[i]], answer[i + 1])
        
print(answer[0])

설명

dp문제라고 한다.

!!!!뒤!!!! 부터 계산을 해주면 되는데 만약

1. 상담이 끝나는 날이 n을 넘어가게 되면 일을 맡을 수 없기 때문에 dp[i] = dp[i + 1]

2. 그 외의 부분에는

(1)[현재 일을 맡았을 때 들어오는 보상 + 현재 일을 끝낸 다음날에 쌓여있는 보상]

(2)일을 맡지 않을 경우 보상

둘을 비교

max(p_list[i] + answer[i + t_list[i]], answer[i + 1])

하여 큰 값을 받아주면 된다.