Skip to content

Best Time to Buy and Sell Stock II #53

@hsskey

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
};

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions