[LeetCode] Best Time to Buy and Sell Stock

아르당·2025년 9월 11일

LeetCode

목록 보기
29/68
post-thumbnail

문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음

Problem

배열 prices가 주어지고, prices[i]번째 날의 주식 가격을 나타낸다.
하나의 날을 선택해서 주식을 매수하고, 그 이후의 다른날을 선택해 매도해서 이익을 최대화하려고 한다.
이 거래를 통해 얻을 수 있는 최대 이익을 반환해라. 만약 어떤 이익도 얻을 수 없다면 0을 반환해라.

Example

#1
Input: prices = [7, 1, 5, 3, 6, 4]
Output: 5
Explanation: 2번째 날(price = 1)일때 사고, 5번째 날(price = 6)일때 팔면 이익이 5가 된다.

#2
Input: prices = [7, 6, 4, 3, 1]
Output: 0
Explanation: 이 경우에 아무런 거래를 할 수 없어서 이익이 0이다.

Constraints

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

Solved

첫날을 사는 날로 기준을 잡고, 이익을 0으로 잡는다. 이후 반복문을 통해서 사는 날의 가격보다 작으면 구매를 한다. 아니면 이후 날에서 산 가격을 뺐을때가 이익보다 크면 이익으로 바꿔주면 된다.

class Solution {
    public int maxProfit(int[] prices) {
        int buy = prices[0];
        int profit = 0;

        for(int i = 1; i < prices.length; i++){
            if(prices[i] < buy){
                buy = prices[i];
            }else if(prices[i] - buy > profit){
                profit = prices[i] - buy;
            }
        }

        return profit;
    }
}
profile
내 마음대로 코드 작성하는 세상

0개의 댓글