https://www.acmicpc.net/problem/11501
문제 해결을 위한 과정
이 문제의 경우 N이 1,000,000 이므로 일반적인 이중 for문으로는 해결할 수 없습니다. 그렇다면 한번 뒤집어보면 어떨까요?
각각의 테스트 케이스를 뒤집으면 다음과 같습니다.
6 7 10 -> 증가하는 경우는 따지지 않음
9 5 3 -> (9-5) + (9-3) = 10
2 1 3 1 1 -> (2-1) + (3-1) + (3-1) = 5
즉 뒤집으면 보다 쉽게 해결할 수 있음을 알 수 있습니다.
뒤집어진 배열을 조회하면서 다음날의 주가가 더 낮다면 현재까지 있는 주가 중 최대 주가 - 다음날 주가를 더하면 쉽게 해결할 수 있습니다.
소스코드
T = int(input())
for t in range(T):
n = int(input())
arr = list(map(int, input().split()))
revArr = arr[::-1]
cost = revArr[0]
ans = 0
for i in range(1, len(revArr)):
if cost < revArr[i]:
cost = revArr[i]
else:
ans += (cost - revArr[i])
print(ans)