Leetcode Java Best Time to Buy and Sell Stock II

업데이트:

문제

Link

코드

class Solution {

  public int maxProfit(int[] prices) {
    int idx = 0;
    int sum = 0;
    int min = 0;
    while (idx < prices.length) {
      while (idx < prices.length - 1 && prices[idx] >= prices[idx + 1]) {
        idx++;
      }
      min = prices[idx++];
      while (idx < prices.length - 1 && prices[idx] <= prices[idx + 1]) {
        idx++;
      }
      sum += prices.length > idx ? prices[idx++] - min : 0;
    }
    return sum;
  }

}

결과

Link

설명

  1. 주식에 대한 가격 정보를 담은 배열 prices를 이용하여 이익이 되는 값들의 합이 최대인 결과를 구하는 문제이다.

  2. 문제 풀이에 필요한 변수를 정의한다.
    • idx는 이익을 발생시킬 수 있는 최소와 최대 index를 구하기 위한 임시 변수이다.
    • sum은 각 이익들의 합을 저장하기 위한 변수이다.
    • min은 이익을 발생시킬 수 있는 최소 index의 값을 임시 저장하기 위한 변수이다.
  3. 주어진 배열 prices를 반복하여 최대 이익의 합을 구한다.
    • 반복을 통해 idx가 $prices.length - 1$보다 작고 현재의 값이 다음 값보다 크거나 같을 경우, idx를 증가시킨다.
    • 위에서 증가된 idx의 위치는 최소한의 이익 실현이 가능한 시작 위치이므로, min에 prices[idx] 값을 저장하고 idx를 증가시킨다.
    • 반복을 통해 idx가 $prices.length - 1$보다 작고 현재의 값이 다음 값보다 작거나 같을 경우, idx를 증가시킨다.
    • 위에서 증가된 idx의 위치는 이익 실현이 가능한 위치이거나 prices의 크기를 벗어난 경우이므로, prices의 길이보다 idx가 작으면 sum에 $prices[idx] - min$을 더한다.
  4. 반복이 완료되면 최대 이익의 합을 저장한 변수 sum을 주어진 문제의 결과로 반환한다.

소스

Sample Code는 여기에서 확인 가능합니다.

댓글남기기