알고리즘

[BOJ/동적 프로그래밍] 14501 퇴사

motti 2023. 9. 19. 18:21
반응형

https://www.acmicpc.net/problem/14501

 

14501번: 퇴사

첫째 줄에 백준이가 얻을 수 있는 최대 이익을 출력한다.

www.acmicpc.net


풀이

n = int(input())

answer = [(0,0)]

for day in range(1,n+1):
    time, price = map(int,input().split())

    answer.append((time,price))
 
dp = [0]*(n+1)

for i in range(1,n+1): 
    time = answer[i][0] - 1
    price = answer[i][1]
    day = time+i
    
    # 상담을 안하는 날이면 기존값과 전날값중 큰것 비교
    dp[i] = max(dp[i-1],dp[i])
    if day<=n:
        dp[day] = max(dp[i-1] + price, dp[day]) # 이전값 가져오기


        
print(dp[n])

1. 걸리는 시간과 비용을 리스트에 넣어줌

2. 상담을 안하는 날이면 기존값과 전날값중 큰 것 비교

3. 상담을 하는 날이고, 가능하다면(DAY <=N) 이전값에 비용을 더한 것과 기존값 중 비교

반응형