728x90
15486번: 퇴사 2
첫째 줄에 N (1 ≤ N ≤ 1,500,000)이 주어진다. 둘째 줄부터 N개의 줄에 Ti와 Pi가 공백으로 구분되어서 주어지며, 1일부터 N일까지 순서대로 주어진다. (1 ≤ Ti ≤ 50, 1 ≤ Pi ≤ 1,000)
www.acmicpc.net
🤔 문제분석
1차원 dp 테이블을 가지고 문제를 해결 할 수 있다. 시간과 금액을 순회하는데 i번째 순회에서의 dp값을 갱신하는 방법은 dp[i+t] = 현재까지의 최대가치 + p로 표현할 수 있다. 해당문제는 현재까지의 최대 가치를 생각해내는 것이 제일 중요한 포인트이다.
예를들어 아래의 표를 살펴보자, i가 5일때 생각해보면, dp[5+5일의시간] = 5일까지 최대 갖을 수 있는 금액 + 5일의 금액 으로 표현 할 수 있다.
💻 코드
import sys
input = sys.stdin.readline
N = int(input())
dp = [0 for _ in range(N+2)]
prev = 0
for i in range(1, N+1):
t, p = map(int, input().split())
if dp[i] > prev:
prev = dp[i]
if N+1 >= i + t:
dp[i+t] = max(dp[i+t], prev + p)
print(max(prev, dp[N+1]))
🎯 피드백 및 개선사항
이번문제도 다이나믹 프로그래밍 유형중 하나로, 여러가지 방안으로 생각해보며 어떻게 문제를 풀지 고민하는 시간이 저에게 큰 도움이 된 것 같습니다. 점점 다이나믹 프로그래밍 문제에 자신감을 갖게 되는것 같습니다 👏👏👏
728x90
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 2056번 : 작업 (0) | 2024.01.28 |
---|---|
[백준] 2169번 : 로봇 조종하기 (1) | 2024.01.24 |
[백준] 13398번 : 연속합 2 (1) | 2024.01.22 |
[백준] 1256번 : 사전 (0) | 2024.01.21 |
[백준] 2240번 : 자두나무 (0) | 2024.01.21 |