14501번: 퇴사
첫째 줄에 백준이가 얻을 수 있는 최대 이익을 출력한다.
www.acmicpc.net
예시처럼 일정표가 있을 때 수익은
- 7일에는 일을 하지 못한다.
- 6일에도 일을 하지 못한다.
- 5일에 시작해서 6일에 끝낸다(15). 7일에 일을 할 수 있다면 한다.
- 4일에 일을 끝낸다(20). 5일 이후에 가능한 일을 한다(15). -> 35
- 3일에 일을 끝낸다(10). 4일 이후에 가능한 일을 한다(35). -> 45
- 2일에 시작해서 6일에 끝낸다(20). 7일에 일을 할 수 있다면 한다.
- 1일에 시작해서 3일에 끝낸다(10). 4일 이후에 가능한 일을 한다(35). -> 45
로 마지막 날부터 계산할 수 있다. i일차의 수익을 dp[i]에 저장할 때 아래와 같이 작성하면 된다.
N = int(input())
schedules = [list(map(int, input().split())) for _ in range(N)]
dp = [0 for _ in range(N+1)]
for i in range(N-1, -1, -1):
# 현재 날짜와 일하는데 걸리는 날이 전체 날짜보다 크다면
if i + schedules[i][0] > N:
dp[i] = dp[i+1] # 오늘은 일 못한다. 내일 수익으로 저장
continue
# 내일 수익과, 오늘 수익에 오늘 일정이 끝난 날 이후의 수익을 더한 값을 비교해
# 오늘까지의 수익으로 저장한다.
dp[i] = max(dp[i+1], schedules[i][1] + dp[i+schedules[i][0]])
print(dp[0])
'알고리즘 > 백준' 카테고리의 다른 글
[백준 파이썬] 14891 톱니바퀴 (0) | 2023.07.27 |
---|---|
[백준 파이썬] 14503 로봇 청소기 (0) | 2023.07.21 |
[백준 파이썬] 4179 불! (0) | 2023.07.20 |
[백준 파이썬] 3190 뱀 (0) | 2023.07.19 |
[백준 파이썬] 1244 스위치 켜고 끄기 (0) | 2023.07.19 |