Skip to content

Best Time to Buy and Sell Stock II #53

Description

@hsskey

문제 설명 | Best Time to Buy and Sell Stock II

주식을 매일 거래할 수 있으며, 최대 한 주만 보유할 수 있을 때 얻을 수 있는 최대 이익을 구하는 문제입니다. 같은 날에 구매하고 판매하는 것도 가능

📝 제약조건

  • 1 <= prices.length <= 3 * 10^4
  • 0 <= prices[i] <= 10^4
  • 한 번에 최대 1주만 보유 가능
  • 같은 날 거래 가능

💡 예시

  • Input: [7,1,5,3,6,4]
    • Output: 7
    • 설명:
      • 2일차 구매(1), 3일차 판매(5) → 이익 4
      • 4일차 구매(3), 5일차 판매(6) → 이익 3
      • 총 이익: 4 + 3 = 7

문제 해결 과정

Step 1: 문제 이해하기

  • 작은 예시로 직접 풀어보기:
    • [1,2,3] → 매일 오르니 2의 이익
    • [3,2,1] → 계속 하락하니 0의 이익
    • [1,2,1,3] → 1→2 (이익1) + 1→3 (이익2) = 총 이익 3

Step 2: 접근 방법

  • 직관적으로 생각하기

    1. 매일매일의 가격 변동을 확인
    2. 상승하는 구간에서는 항상 이익 실현 가능
    3. 하락하는 구간에서는 거래하지 않음
  • 알고리즘 표 작성

i = 1 (첫째날부터 시작)
↓
오늘 가격(prices[i])과 어제 가격(prices[i-1]) 비교
↓
오늘 가격이 더 높다면
    → 이익(profit)에 차익 더하기
↓
i++ 하고 다시 처음으로

Step 3: 코드 설계

  1. 총 이익(profit) 변수 초기화
  2. 둘째날(i=1)부터 마지막날까지 순회:
    • 당일 가격이 전일 가격보다 높으면
    • 차익을 총 이익에 더함
  3. 최종 이익 반환

Step 4: 코드 구현

var maxProfit = function(prices) {
    let profit = 0

    for(let i = 1; i < prices.length; i++) {
        if(prices[i] - prices[i - 1] > 0) {
            profit += prices[i] - prices[i - 1]
        }
    }

    return profit
};

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions