Return the most profit from stock quotes.
Stock quotes are stored in an array in order of date. The stock profit is the difference in prices in buying and selling stock. Each day, you can either buy one unit of stock, sell any number of stock units you have already bought, or do nothing. Therefore, the most profit is the maximum difference of all pairs in a sequence of stock prices.
요약
주어진 리스트에서 최대 이득값을 구해서 return
None
[ 1, 2, 3, 4, 5, 6 ] => 15 (buy at 1,2,3,4,5 and then sell all at 6)
[ 6, 5, 4, 3, 2, 1 ] => 0 (nothing to buy for profit)
[ 1, 6, 5, 10, 8, 7 ] => 18 (buy at 1,6,5 and sell all at 10)
[ 1, 2, 10, 3, 2, 7, 3, 2 ] => 26 (buy at 1,2 and sell them at 10. Then buy at 3,2 and sell them at 7)
def get_most_profit_from_stock_quotes(quotes):
return sum(max(quotes[i:]) - q for i, q in enumerate(quotes))
최대이득값 = 현재 산 가격을 미래 가격 중 가장 비싼 값에 팜(자신이 가장 비싼 값일 경우 0)
현재 가격을 포함한 리스트에서 가장 큰 값 - 현재 값 for loop를 통해 반복해 주고 이때 나온 각 요소의 최대 이득값을 sum함수로 합산
def get_most_profit_from_stock_quotes(quotes):
gain,top = 0, -float('inf')
for v in reversed(quotes):
if top<v: top = v
else: gain += top-v
return gain
원리는 같으나 역순으로 구하는 방식 최초에 top 변수에 음의 무한대수를 설정해 놓는것은 for loop에서 최초의 v가 0일 경우를 대비해서임. top보다 작은 수가 올 떄 이를 팔고 gain에 더해둠. 현재 top보다 큰 수가 오면 top을 바꿔줌 반복하다보면 최대 이득값이 역산으로 더해지게됨.