[BaekJoon 14501 : 동적계획법, Python] - 퇴사 1

2021, Oct 29    


백준 14501 퇴사 1 : 실버 3



Solution


DP Memoization 활용(Bottom-up)

import sys
input = sys.stdin.readline

d = int(input())
consult = [[-1, -1]]
for _ in range(d):
    day, pay = map(int, input().split())
    consult.append([day, pay])

DP = [0 for _ in range(d+1)]      # k 일까지 상담을 진행했을 때 얻을 수 있는 최대이익
for i in range(1, d+1):
    for j in range(1, i):
        if j + consult[j][0] <= i:
            DP[i] = max(DP[i], DP[j])
    
    if i + consult[i][0] <= d+1:
        DP[i] += consult[i][1]

print(max(DP))


풀이과정 및 느낀점


상대적으로 쉬운 DP 문제이다. DP 는 기본적으로 개념 정의만 똑바로 하고 점화식을 올바르게 세우는 게 가장 중요한 거 같다.
다만 이 풀이를 이후의 포스팅에 올라올 15486 번 퇴사2에 적용하면 시간초과에 걸리게 된다.
따라서 다른 풀이가 필요한데, 그 풀이는 이후에 별도 포스팅으로 업로드할 예정이다.