문제

image.png

🔍My Approach

🚩My Submission


N = int(input())

T = [0]
P = [0]
dp = [0] * (N + 2)

for _ in range(N):
    arr = input().split()
    T.append(int(arr[0]))
    P.append(int(arr[1]))

#dp 시작 조건
if T[N] == 1:
    dp[N + 1] = 0
    dp[N] = P[N]
else:
    dp[N + 1] = 0
    dp[N] = 0

for i in range(N - 1, 0, -1):
    if i + T[i] <= N + 1:
        dp[i] = max(dp[i + 1], P[i] + dp[i + T[i]])
    else:
        dp[i] = dp[i + 1]

print(dp[1])

💡TIL

  1. 점화식 조건에서 i+T[i] ≤ N+1이 있고 이것은 현재일 + 현재일에 예약된 상담일수가 퇴사일을 넘기지 않아서 상담이 가능하다는 것이다. 이때 퇴사일(N+1)에 대한 dp를 시작조건에서 정해놓지 않아서 i+T[i]가 N+1일때, indexError가 발생했다.
  2. 배열을 처리할 때 어떤 것은 1부터 시작하고 어떤 것은 0부터 시작해서 혼란이 있었다. index를 1 기준으로 처리해야 헷갈리지 않을 것 같다.