[LeetCode] 122. Best Time to Buy and Sell Stock II - Java[자바]

doxxx·2023년 8월 23일
0

LeetCode

목록 보기
8/25
post-thumbnail

링크

문제

가격 배열 가격이 주어지며, 가격[i]는 해당 날짜에 지정된 주식의 가격입니다.

매일 주식을 매수 및/또는 매도할 수 있습니다. 한 번에 최대 한 종목의 주식만 보유할 수 있습니다. 그러나 매수한 후 같은 날 즉시 매도할 수 있습니다.

달성할 수 있는 최대 수익을 찾아서 반환하세요.

풀이

그래프가 있다면, 단조 증가하는 구간의 차를 구해 더하면 될 것이다.

첫번 째 예시를 그래프로 그려보게 된다면 위와 같이 좌표 평면상에 그릴 수 있고, 단조 증가하는 구간을 두 곳 찾을 수 있다.

즉 2개의 포인터로, 감소하기 전까지의 구간을 찾아 차이를 더한 값을 구한다.

class Solution {  
    public int maxProfit(int[] prices) {  
        int profit = 0;  
        int buyIndex = 0;  
  
        for (int sellIndex = 0; sellIndex < prices.length - 1; sellIndex++) {  
            if (prices[sellIndex + 1] < prices[sellIndex]) {  
                profit += prices[sellIndex] - prices[buyIndex];  
                buyIndex = sellIndex + 1;  
            }  
        }  
        profit += prices[prices.length - 1] - prices[buyIndex];  
  
        return profit;  
    }  
}

prices.length 를 뽑아낸 코드이다.

class Solution {  
  
    public int maxProfit(int[] prices) {  
        int profit = 0;  
        int buyIndex = 0;  
        int length = prices.length;  
  
        for (int sellIndex = 0; sellIndex < length - 1; sellIndex++) {  
            if (prices[sellIndex + 1] < prices[sellIndex]) {  
                profit += prices[sellIndex] - prices[buyIndex];  
                buyIndex = sellIndex + 1;  
            }  
        }  
        profit += prices[length - 1] - prices[buyIndex];  
  
        return profit;  
    }  
}

위의 설명처럼, buyIndex와 for 문에서 sellIndex로 2개의 포인터를 이용하여 위에서 언급한 대로 풀 수 있었다.

0개의 댓글