문제
https://www.acmicpc.net/problem/14501
내 풀이
처음에 배열로 다이나믹 프로그래밍을 하려다가, 머리가 안 돌아가서 재귀 함수를 사용하였다.
여기서 포인트는 i일을 선택할 것인지 또는 선택하지 않을 것인지 구현하는 것이다.
만약 i일을 선택할 경우, time[i]도 고려해야 한다.
import sys
input = sys.stdin.readline
N = int(input())
time, pay = [0], [0]
for i in range(N):
t, p = map(int, input().split())
time.append(t); pay.append(p)
MAX = 0
def schedule(i, profit):
global MAX
if i > N:
MAX = max(MAX, profit)
return
schedule(i+1, profit)
if time[i] <= N-i+1:
schedule(i+time[i], profit+pay[i])
schedule(1, 0)
print(MAX)
총평
다이나믹 프로그래밍 너무 오랜만에 해봐서 버벅거렸지만 그래도 해냈다.
'알고리즘 > 삼성 기출' 카테고리의 다른 글
인구 이동 [백준 16234번] (0) | 2022.10.01 |
---|---|
치킨 배달 [백준 15686번] (0) | 2022.09.29 |
테트로미노 [백준 14500번] (0) | 2022.09.19 |
로봇 청소기 [백준 14503번] (1) | 2022.09.16 |
연구소 [백준 14502번] (0) | 2022.08.29 |