[파이썬] 백준 14728 : 벼락치기 (골드5)
풀이
방향성 생각
- 냅색 기본문제
- 상한선이 주어진 무언가가 있을 때 최댓값을 찾는 문제
전체코드
N,T = map(int,input().split())
dp = [[0]*(T+1) for _ in range(N+1)] # T시간 썼을 때 얻을 수 있는 점수 최대값
for i in range(1,N+1):
t,s = map(int,input().split())
for j in range(T+1):
if j >= t:
# max(현재 문제를 풀지 않는 경우 / 현재 문제를 푼 경우)
dp[i][j] = max(dp[i-1][j],dp[i-1][j-t]+s)
else:
# 문제를 풀지 못하는 경우
dp[i][j] = dp[i-1][j]
print(max(dp[-1]))
코멘트
- 각 상태를 node로 표현해서 바텀업으로 표현하면 쉽게 풀 수 있다.
- 질문 게시판에도 나와있지만, 문제를 풀지 못하는 경우에도 업데이트를 해줘야한다.
'Algorithm > Dynamic Programming' 카테고리의 다른 글
[파이썬] 프로그래머스 : 숫자 타자 대회 (레벨3) (0) | 2024.05.09 |
---|---|
[파이썬] 프로그래머스 : 올바른 괄호의 개수 (0) | 2024.04.23 |
[파이썬] 프로그래머스 : 사칙연산 (레벨4) (1) | 2024.04.23 |
[파이썬] 코드트리 : 코드트리 코딩 대회 (골드1) (0) | 2024.04.02 |
[파이썬] 백준 2186 : 문자판 (골드3) (0) | 2024.03.18 |
[파이썬] 백준 1301 : 비즈 공예 (골드3) (0) | 2024.03.03 |
[파이썬] 백준 14238 : 출근기록 (골드2) (0) | 2024.02.25 |
댓글