Programming/백준
[실버 4] 백준 25214 - 크림 파스타 (파이썬)
pental
2025. 7. 20. 13:19
분류 : 다이나믹 프로그래밍
링크 : https://www.acmicpc.net/problem/25214
풀이
각 인덱스 i에 대해, D[i]는 A[0]부터 A[i]까지의 최솟값, E[i]는 E[i-1]과 (A[i] - D[i]) 중 더 큰 값이다.
즉, E[i]는 앞에서부터 지금까지의 최댓값을 유지하면서, A[i]에서 이전까지의 최솟값을 뺀 값 중 최대를 갱신한다.
D = [0] * N
E = [0] * N
D[i]는 A[0] ~ A[i] 중 최솟값을 나타내고, E[i]는 지금까지의 A[i] - D[i] 중 최대를 나타낸다.
D[0] = A[0]
for i in range(1, N) :
D[i] = min(D[i - 1], A[i])
최솟값 갱신은 위와 같이 작성하며, D[i]는 A[0] ~ A[i]에서의 최솟값을 저장한다.
E[0] = 0
for i in range(1, N) :
E[i] = max(E[i - 1], A[i] - D[i])
E[i]는 이전 최댓값과 현재 A[i] - D[i] 값 중 큰 것을 유지한다.
코드
# 백준 25214 - 크림 파스타
# 분류 : 다이나믹 프로그래밍
N = int(input())
A = list(map(int, input().split()))
D = [0] * N
E = [0] * N
D[0] = A[0]
for i in range(1, N) :
D[i] = min(D[i - 1], A[i])
E[0] = 0
for i in range(1, N) :
E[i] = max(E[i - 1], A[i] - D[i])
print(*E)