# Best Time to Buy and Sell Stock class Solution: def maxProfit(self, prices: list[int]) -> int: answer = 0 now_max_price = prices[-1] for i in range(len(prices)-1, -1, -1): answer = max(answer, now_max_price - prices[i]) now_max_price = max(now_max_price, prices[i]) return answer """ 걸린 시간: 15분 복잡도: prices 리스트를 한번 순회하는데, 각 반복마다 변수 간 최대값 계산만 하기 때문에 전체 시간복잡도는 O(n)이다. 변수 2개만 사용하기 때문에 공간복잡도는 O(1)이다. 해설: 앞에 나온 최소값과 그 뒤에 나온 최댓값의 차이가 가장 큰 것을 찾는 문제인데, 앞으로 나올 최대값은 뭐가 될지 모르기 때문에 뒤에서부터 prices 리스트를 읽으면서 최대값을 기록하면서 오면 i번째를 보는 시점에 최대값은 뒤에 있는 모든 수 중 최대값이므로 i번째 값이 최소라고 가정할 때의 최선을 플레이를 확인할 수 있다. 이렇게 모든 i번째 값들에 대해 본인들이 최소라고 가정할 때 차이의 최대값 중 최대값을 기록해놓으면 그것이 답이다. """