728x90
반응형
백준 퇴사 파이썬 문제풀이
또 보는 퇴사 문제.
이번에는 또 다른 방법인 바텀업 DP로 풀어보자.
정답코드
n = int(input())
work = []
answer = 0
for i in range(n):
t,p = map(int,input().split())
work.append([t,p])
dp = [0 for _ in range(n+1)]
for idx in range(n)[::-1]:
if idx + work[idx][0] > n:
dp[idx] = dp[idx+1]
else:
dp[idx] = max(dp[idx + work[idx][0]] + work[idx][1], dp[idx+1])
print(max(dp))
탑다운DP와는 다르게 반복문만으로 풀어낼 수 있지만
else 문에 있는 점화식을 도출하기는 쉽지 않다.
결국 마지막 순서에서부터 상담을 포함하는 경우 그렇지 않은 경우들의 최적값을 구해서
다음 값에 대한 dp로 현재 값을 결정한다.
이렇게 한 문제를 재귀로도 탑다운 DP로도 바텀업 DP로도 풀어보면서,
DP로 접근하는 방법을 이해하기도 해야하지만 어느정도는 외우는 감이 있다;;
728x90
반응형
'개발 · 컴퓨터공학 > 알고리즘' 카테고리의 다른 글
백준 11726 2×n 타일링 파이썬 문제풀이 (python 바텀업 DP) (5) | 2024.10.10 |
---|---|
백준 12865 평범한 배낭 파이썬 문제풀이 (python 바텀업 DP) (2) | 2024.10.07 |
백준 12865 배낭 파이썬 문제풀이 (python 최적화, 재귀, 백트래킹 경우의 수, 기억, 탑다운 DP, 메모이제이션) (9) | 2024.10.01 |
백준 14501 퇴사 파이썬 문제풀이 (python 기억, 탑다운 DP, 메모이제이션) (6) | 2024.09.30 |
백준 14501 퇴사 파이썬 문제풀이 (python 최적화, 재귀, 백트래킹 경우의 수) (8) | 2024.09.29 |