#122 Best Time to Buy and Sell Stock II

전우재·2023년 8월 24일
0

leetcode

목록 보기
8/21

문제링크 - https://leetcode.com/problems/best-time-to-buy-and-sell-stock-ii/

문제 분석

  • 1 <= prices.length <= 3 * 10^4
  • 0 <= prices[i] <= 10^4
    배열에 대해 매일 주식을 매수 및 매도를 할 수 있다. 구매한 당일 즉시 판매할 수도 있다. 이때 최대한 얻을 수 있는 이익을 구해라

문제 해결

문제 해결 로직

  1. 주식 보유 여부를 선언한다. 매수 인덱스를 0으로 시작한다. 매도 인덱스를 0로 시작하여 증가시킨다. 이익을 0으로 선언한다.
  2. 매수 값과 매도 값을 비교한다.
    2-1. 매도 값이 매수 값보다 크지만 다음 매도 인덱스의 값이 더 크면 매도 인덱스를 증가시킨다.
    2-2. 매도 값이 다음날보다 작으면 해당 인덱스에 매도한다. 이익을 계산하여 이익에 더한다. 매수 인덱스와 매도인덱스를 해당 인덱스로 초기화한다.

코드 작성

class Solution {
  public int maxProfit(int[] prices) {
    int buyIndex = 0; // 매수 인덱스
    int sellIndex = 0; // 매도 인덱스
    int maxProfit = 0; // 이익

    // 매도 인덱스를 증가시킨다.
    for (int i = 0; i < prices.length - 1; i++) {
      // 파려는 날짜 다음이 더 비싸거나 같으면 매도를 미룬다
      if (prices[sellIndex] <= prices[sellIndex + 1]) {
         // 다음날에 팔도록 
          sellIndex++;

          // 매도 값이 다음날보다 크다
        } else if (prices[sellIndex] > prices[sellIndex + 1]) {
          // 판매하여 이익.
          if (sellIndex > buyIndex) {
            maxProfit += prices[sellIndex] - prices[buyIndex];
        }
        // 다음날 매수한 것으로 인덱스 초기화
        buyIndex = sellIndex + 1;
        sellIndex = sellIndex + 1;
      }
    }

    // 반복문이 끝나도 매수했으면 남은 주식 매도.
    if (sellIndex > buyIndex) {
      maxProfit += prices[sellIndex] - prices[buyIndex];
    }

    return maxProfit;
  }
}

회고

  • 판매 여부를 boolean으로 관리할까도 생각했지만 바로 매수한것으로 쳐서 사용할 일이 없었다.

0개의 댓글

관련 채용 정보