수진개발서
Published 2023. 1. 9. 17:12
[baekjoon] 백준 15486 퇴사2 Algorithm

1. 문제

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

 

15486번: 퇴사 2

첫째 줄에 N (1 ≤ N ≤ 1,500,000)이 주어진다. 둘째 줄부터 N개의 줄에 Ti와 Pi가 공백으로 구분되어서 주어지며, 1일부터 N일까지 순서대로 주어진다. (1 ≤ Ti ≤ 50, 1 ≤ Pi ≤ 1,000)

www.acmicpc.net

2. 풀이

  • 끝나는 날 기준으로 얻을 수 있는 금액을 입력 - 끝나는 날 기준이기때문에 N+1일까지 반복
  • 상담일자와 상담기간을 더했을 때 퇴사 일자를 넘어가면 continus
  • 이전의 저장된 k의 값과 dp[i] 중 비교하여 큰 것으로 갱신
  • dp[i] 는 현재까지의 수익 + 이번 상담 수익 vs 오늘의 상담이 끝나는 시점의 수익 중 큰 값 저장
T/P 1일 2일 3일 4일 5일 6일 7일 8일
3 / 10       10        
5 / 20           20    
1 / 10       10        
1 / 20         10+20      
2 / 15             10+20+15  
4 / 40               continue
2 / 200               continue

3. 코드

<code />
# 상담 N일동안 최대한 많은 상담 # 상담 완료 기간 T/ 상담을 했을 때 받을 수 있는 금액 P # 가치 구하기, 배낭문제와 같음 import sys n = int(sys.stdin.readline()) t, p = [], [] dp = [0] * (n+1) for _ in range(n): ti, pi = map(int, sys.stdin.readline().split()) t.append(ti) p.append(pi) k = 0 for i in range(n): k = max(k, dp[i]) if i + t[i] > n: continue dp[i + t[i]] = max(k + p[i], dp[i + t[i]]) print(max(dp))

'Algorithm' 카테고리의 다른 글

[programmers] 프로그래머스 등굣길  (0) 2023.01.09
[baekjoon] 백준 1520 내려막길  (0) 2023.01.09
profile

수진개발서

@sujin_park0607

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!