[ LeetCode | Java ] 122. Best Time to Buy and Sell Stock II

dokim·2023년 8월 28일
post-thumbnail

🏷️122. Best Time to Buy and Sell Stock II


1. 문제 설명

  • 당신은 정수 배열 prices를 받습니다. prices[i]는 i번째 날의 특정 주식 가격입니다.

  • 매일, 주식을 사고/팔 수 있습니다. 언제든지 주식은 최대 한 주만 보유할 수 있습니다. 그러나, 당일에 주식을 사고 바로 팔 수 있습니다.

  • 가능한 최대 이익을 찾아 반환하세요.

예시 1:

입력: 가격 = [7,1,5,3,6,4]
출력: 7
설명: 2일차에 매수(가격 = 1)하고 3일차에 매도(가격 = 5), 이익 = 5-1 = 4.
그런 다음 4일차에 매수(가격 = 3)하고 5일차에 매도(가격 = 6), 이익 = 6-3 = 3.
총 이익은 4 + 3 = 7입니다.

예시 2:

입력: 가격 = [1,2,3,4,5]
출력: 4
설명: 1일째 매수(가격 = 1), 5일째 매도(가격 = 5), 이익 = 5-1 = 4.
총 이익은 4입니다.

예시 3:

입력: 가격 = [7,6,4,3,1]
출력: 0
설명: 긍정적인 이익을 얻을 수 있는 방법이 없으므로 최대 이익 0을 달성하기 위해 주식을 사지 않습니다.

제약:

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

2. 접근 방법

  • 이전 문제와 비슷한 문제이므로 이전 코드를 활용하여 코드를 작성하였습니다.
  • 먼저 처음 min의 가격을 prices[]의 첫번째 index값으로 저장하고, 반복문을 순회하면서 min보다 큰 값을 찾아 수익을 연산하고 profit에 저장합니다.
  • profit저장하고 min을 초기화시켜 줍니다.

3. 구현 코드

class Solution {
    public int maxProfit(int[] prices) {
        
        int min = prices[0]; // 가격이 작은 수를 저장하는 변수
        int profit = 0; // 결과값 변수
        
        for(int i = 1; i < prices.length; i++){
            if(min > prices[i]) // 현재 가격보다 작으면
                min = prices[i]; // 작은 가격 저장
            else{
                profit += prices[i] - min; // 아니면 현재 가격 - 이전 가격
                min = prices[i]; // 수익 연산 후 min 초기화
            }
        }
        return profit;
    }
}
  • 시간 복잡도: O(n)
  • 공간 복잡도: O(1)

4. 최종 회고

  • 이전 코드를 다시 상기시키며 더 잘 활용할 수 있도록 고민을 했지만 조건과 변수 초기화 설정면 더해주면 간단히 해결되는 문제였습니다.
  • 다른 개발자의 코드를 봤을 때 다양한 방법이 있었지만 이렇게 풀어도 답만 나오면 되는건가.. 라는 생각이 드는 문제였습니다.

0개의 댓글