본문 바로가기

개발/Algorithm

[리트코드] Best Time to Buy and Sell Stock(python)

리트코드, Best Time to Buy and Sell Stock_주식을 사고팔기 가장 좋을 때

 

TL;DR

  • 주어진 배열을 순회하며 문제의 조건을 구현할 수 있는지

문제 분석

1. i번째 날 주어진 주식의 가격이 담긴 배열 prices가 주어진다.
2. 가장 주식이 쌀 때 구매하고 싶고, 미래에 가장 값이 비쌀 때 주식을 판매하고 싶다.
3. 그 때의 최대 수익을 반환하라. 만약 수익을 창출할 수 없다면 0을 반환하라.

입출력 형태

입출력 예시

 

- 일 별 주식의 가격이 담긴 배열 prices가 주어진다.

- 예시 1 :

    - 주식이 가장 저렴한 1일때 사서, 그 이후 미래에 가장 비쌀 때인 6일 때 팔면 최대 수익인 5를 얻을 수 있다.

- 예시 2:

    - 어느 시점에 주식을 사던, 수익을 창출할 수 없다. 따라서 0을 반환한다.

풀이

class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        profit = 0
        min_price = sys.maxsize # 가장 큰 수를 일단 담아둔다.
        
        for price in prices:
            # 최저 가격을 갱신하며, 각각의 수익을 비교한다.
            min_price = min(min_price, price)
            profit = max(profit, price - min_price)
            
        return profit

 

- 브루트 포스를 사용해서 2중 반복문을 사용할 수 있지만 배열의 길이가 1 이상 10_000이라는 조건 때문에 문제를 해결할 수 없다.

- 배열을 인덱스에 따라 진행하며 각 점에서의 최저값과 수익을 갱신한다.

반응형