[오늘의 코테연습장] [LeetCode] 121. Best Time to Buy and Sell Stock

Mini_me·2023년 8월 24일
0

공부[코테연습장]

목록 보기
18/36
post-thumbnail

🔖 문제

  • prices 배열에는 각 인덱스마다, 그날의 지정된 주식가격이 저장되어있습니다.
  • 특정 날을 선택하여 주식을 매입, 그 날 이후 주식을 매도하여 최대 이익을 반환합니다.
  • 이익이 발생하지 않는다면, 0을 반환해야합니다.

🔖접근 방식

딱 한번 구매하고, 딱 한번 판매하는 과정을 통해 최대 이익을 반환해야되기때문에,
배열에서 최대값과 최솟값을 찾아 최댓값 - 최솟값하게 된다면, 결과값은 최대 이익이 반환됩니다.

다만 주의해야할 점이 주식을 산 이후의 날짜에 매도할 수 있다는 점입니다.

  1. 이익이 발생하지 않는다면 0을 반환합니다.
  2. 최솟값은 배열의 첫번째 값으로 초기화합니다.
  3. max값과 profit값은 0으로 초기화합니다.
  4. i=1 부터 prices 배열을 순회하며 최솟값을 찾습니다.
  5. profit = 배열 요소값 - 최솟값
  6. 만약 profit 값이 max 보다 크다면
    해당 profit 값으로 max 값 갱신
  7. max 값 리턴

🔖문제 풀이 코드

class Solution {
    public int maxProfit(int[] prices) {
      if (prices == null || prices.length == 0) {
        return 0;
    }
    
    int min = prices[0];
    int max= 0;
    int profit = 0;
    for (int i = 1; i < prices.length; i++) {
        if ( prices[i] < min) {
            // 최솟 값 찾기
            min = prices[i];
        } else {
            profit  = prices[i] - min;
            if ( profit > max) {
                //profit의 최댓값 찾기
                max = profit;
            }
        }
    }
    
    return max;
}
}

0개의 댓글

관련 채용 정보