Code Wars 24: Most profit from stock quotes

김기욱·2022년 7월 3일
0

코딩테스트

목록 보기
67/68

문제설명

 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을 바꿔줌 반복하다보면 최대 이득값이 역산으로 더해지게됨.

profile
어려운 것은 없다, 다만 아직 익숙치않을뿐이다.

0개의 댓글