[백준] 15486 : 퇴사 2 (Python)

백지원·2023년 9월 17일
0

정답코드

import sys
input = sys.stdin.readline

N = int(input())
T, P = [0]*(N+1), [0]*(N+1)
for i in range(1, N+1):
    T[i], P[i] = map(int, input().split())

dp = [0]*(N+1) # dp[k] = k일까지 가능한 최댓값
for i in range(1, N+1):
    dp[i] = max(dp[i], dp[i-1]) # 이전까지의 최댓값
    end_day = i+T[i]-1 # 상담 마지막 날
    if end_day <= N:
        dp[end_day] = max(dp[end_day], dp[i-1]+P[i])
print(dp[N])

dp[k] : k일까지 가능한 최댓값
end_day : 상담이 끝나는 날

if end_day <= N:
        dp[end_day] = max(dp[end_day], dp[i-1]+P[i])

위 코드로 상담 종료 날을 업데이트 할 때 dp[i]+P[i]가 아니라 dp[i-1]+P[i]로 업데이트 해줘야 한다는 점 주의

0개의 댓글