[백준 BOJ_14501] 퇴사 Python 풀이

출처: 백준 온라인 저지

문제

image image image

풀이

동적계획법으로 풀었습니다. cache는 다음과 같습니다.

cache[i][0] = i+1번째 날을 포함하지 않는 경우
cache[i][1] = i+1번째 날을 포함하는 경우

for loop을 처음부터 N길이 까지 돌려준 뒤 퇴사 전까지 상담이 끝나는 경우에만 돌려주었습니다.
cache[i][1]에 i+1번째 날짜의 금액을 더해주고, i+1번째를 포함할 수 있는 날짜들(i+1번째 상담이 끝난 뒤의 날짜들)의 현재 값과, i+1번째의 값 중 큰 값으로 update해주었습니다.

마지막에는 cache에 있는 수들 중 가장 큰 값을 찾아 return해줍니다.

코드

import sys
input = sys.stdin.readline

N = int(input())
schedule = [ list(map(int, input().split())) for _ in range(N) ]
cache = [[0, 0] for _ in range(N)]

for i in range(N):
    if i + schedule[i][0]-1 >= N:
        continue
    cache[i][1] += schedule[i][1]
    for j in range(i+1, N):
        if j >= i + schedule[i][0]:
            cache[j][0] = max(cache[i][0], cache[i][1], cache[j][0])
            cache[j][1] = max(cache[i][0], cache[i][1], cache[j][1])

print(max(map(max, cache)))

Leave a comment