[Python] 14501번 - 퇴사

sunnny·2023년 8월 28일
0

BOJ

목록 보기
6/8

🐻‍❄️ 내가 생각한 풀이

1일 ~ i일까지 상담 가능할 때의 최대 금액을 구하는 방식으로 문제를 품 -> for문으로 i = 0~N-1
dp[i]에 해당 값을 저장

  • 이전의 dp문제에서 그랬듯이 i번째 날은 무조건 포함해야 한다는 조건을 넣음 -> 근데 이렇게 하면 퇴사일을 넘어가서 포함하지 못하는 경우도 발생

🐻 정답 풀이법

dp[i] = i번째 날~퇴사일 까지 벌 수 있는 최대 수입!!!

  1. for문으로 i = N-1 ~ 0
  2. if i+arr[i][0] <= N 이면 -> dp[i] = max(dp[i+arr[i][0]]+arr[i][1], dp[i+1])
    아니면 -> dp[i] = dp[i + 1]

🧐 질문!!

Q1. 뒤에서(N-1)부터 생각해야하는 이유???

Q2. dp[i] = max(dp[i+arr[i][0]]+arr[i][1], dp[i+1]) 왜 이런 식을?

💥 에러 발생, 해결

  • if i+arr[i][0] < N:<=로 바꿔줘야 마지막날 전까지는 꽉 채워서 일할 수 있다!

🧞‍♀️ 정답코드

import sys
input = sys.stdin.readline
N = int(input())
arr = []
for i in range(N):
    arr.append(list(map(int, input().split())))
dp = [0 for i in range(N+1)]
answer = 0
for i in range(N-1, -1, -1):
    if i+arr[i][0]<=N:
        dp[i] = max(dp[i+arr[i][0]]+arr[i][1], dp[i+1])
    else:
        dp[i] = dp[i + 1]
print(dp[0])

🛌 후기

개강날부터 퇴사, 종강을 꿈꾸는 중,,

0개의 댓글