본문 바로가기
개발

[LeetCode] 121. Best Time to Buy and Sell Stock

by 심고수 2023. 2. 7.
# 문제 설명
You are given an array prices where prices[i] is the price of a given stock on the ith day.
You want to maximize your profit by choosing a single day to buy one stock and choosing a different day in the future to sell that stock.
Return the maximum profit you can achieve from this transaction. If you cannot achieve any profit, return 0.

 

Example 1:
Input: prices = [7,1,5,3,6,4]
Output: 5
Explanation: Buy on day 2 (price = 1) and sell on day 5 (price = 6), profit = 6-1 = 5.
Note that buying on day 2 and selling on day 1 is not allowed because you must buy before you sell.

Example 2:
Input: prices = [7,6,4,3,1]
Output: 0
Explanation: In this case, no transactions are done and the max profit = 0.

 

Constraints:
1 <= prices.length <= 10^5
0 <= prices[i] <= 10^4

 

이 문제를 봤을 때 풀었던 기억이 났지만 어렴풋이 생각날 뿐 해결책이 떠오르지 않았다. 문득 DP로 풀면 될 것 같은 생각이 나서 DP로 코드를 작성했지만 brute force 방법 또한 for문이 두 번 도는 형태였기에 같은 time complexity를 가졌다. 그러다 min_price만 for문을 돌면서 업데이트하고, 현재 가격과  min_price차이를 계산해나가면 최고 이익을 얻을 수 있다는 생각이 들어 코드를 작성하였고 방법은 아래와 같다.

class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        min_price = prices[0]
        max_profit = 0
        for price in prices[1:]:
            profit = price - min_price
            if max_profit < profit:
                max_profit = profit
            if price < min_price:
                min_price = price
        return max_profit

댓글