Skip to content

Best Time to Buy and Sell Stock #52

@hsskey

Description

@hsskey

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

주식 가격이 담긴 배열이 주어질 때, 한 번의 거래로 얻을 수 있는 최대 이익을 구하는 문제

📝 제약조건

  • 1 ≤ prices.length ≤ 10^5
  • 0 ≤ prices[i] ≤ 10^4
  • 주식은 한번만 사고 팔 수 있음
  • 미래의 가격으로만 팔 수 있음

💡 예시

  • Input: [7,1,5,3,6,4]
    • Output: 5
    • 설명: 1에 사서 6에 팔면 최대 이익 5를 얻을 수 있음

문제 해결 과정

Step 1: 문제 이해하기

  • 작은 예시로 직접 최대 이익 계산해보기
    • [7,1,5] → 1에 사서 5에 팔면 이익 4
    • [7,6,4] → 어떻게 사고 팔아도 이익을 낼 수 없음 → 0 반환

Step 2: 접근 방법

  • 직관적으로 생각하기
    1. 현재까지의 최소 가격을 기억하면서
    2. 현재 가격에서 최소 가격을 뺀 값(이익)이 최대가 되는 경우를 찾기
  • 알고리즘 표 작성
minPrice = prices[0] (첫 가격을 최소값으로 설정)
maxProfit = 0 (최대 이익 초기화)
↓
현재 가격 prices[i] 확인
↓
prices[i]가 minPrice보다 작은지 확인
↓
yes -> minPrice 업데이트
↓
현재 가격 - 최소 가격 계산하여 maxProfit과 비교, 더 크면 업데이트

Step 3: 코드 설계

  1. 최소 가격과 최대 이익 변수 초기화
  2. 배열 순회하면서:
    • 현재 가격이 최소 가격보다 작으면 최소 가격 업데이트
    • 현재 가격 - 최소 가격으로 이익 계산
    • 계산된 이익이 최대 이익보다 크면 최대 이익 업데이트
  3. 최대 이익 반환

Step 4: 코드 구현

var maxProfit = function(prices) {
    let minPrice = prices[0]
    let maxProfit = 0
 
    for(let i = 1; i < prices.length; i++) {
        if(minPrice > prices[i]) {
            minPrice = prices[i]
        } 
        maxProfit = Math.max(maxProfit, prices[i] - minPrice)
    }
    return maxProfit
};

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions