백준

14501 - 퇴사

whiporithm 2023. 6. 9. 16:23

 


 

문제

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

 

14501번: 퇴사

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

www.acmicpc.net

 

풀이

해당 문제는 뒤에서부터 접근하여 최댓값을 갱신하는 방식으로 풀 수 있다.

 

D[i] = i번째 날부터 마지막 날까지 낼 수 있는 최대 이익이라고 정한다.

 

이후 뒤에서부터 (지금 날짜 + 오늘 일하면 걸리는 날짜) <= n 일 경우

값을 갱신할지 말지 정해주면 된다.

 

만약 오늘 일하는게 여태 이익의 최댓값보다 작다면 갱신할 필요가 없고 (이 날 일을 할 필요가 없음), 크다면 갱신해준다.

 

 

코드

n = int(input())
d = [0] * (n+1)
t = []
p = []
max_value = 0

for i in range(n):
    a, b = map(int, input().split())
    t.append(a)
    p.append(b)

# 뒤에서부터 탐색한다.
for i in range(n-1, -1, -1):
    limit = t[i] + i

    # 근무를 할 수 있다면
    if limit <= n:
        d[i] = max(p[i] + d[limit], max_value)
        max_value = d[i]
    else:
        d[i] = max_value
print(max_value)

 

후기

 

해당 문제를 푸는 방법은 다양한 거 같다. 앞에서부터 접근할 수 도 있고.. n이 작다보니 완전탐색으로도 충분히 풀 수 있다.

 

아이디어를 떠올리는 것과 구현은 항상 별개라고 생각한다. 아이디어를 명확하게 정리해서 구현으로 손쉽게 옮길 수 있도록 하는 연습이 더 필요할 거 같다.

'백준' 카테고리의 다른 글

2579 - 계단 오르기  (0) 2023.06.10
18353 - 병사 배치하기  (0) 2023.06.09
11055 - 가장 큰 증가하는 부분 수열  (0) 2023.06.05
11053 - 가장 긴 증가하는 부분 수열  (0) 2023.06.04
11727 - 2 x n 타일링2  (0) 2023.06.04