-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Labels
Description
문제 설명 | 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를 얻을 수 있음
- Output:
문제 해결 과정
Step 1: 문제 이해하기
- 작은 예시로 직접 최대 이익 계산해보기
- [7,1,5] → 1에 사서 5에 팔면 이익 4
- [7,6,4] → 어떻게 사고 팔아도 이익을 낼 수 없음 → 0 반환
Step 2: 접근 방법
- 직관적으로 생각하기
- 현재까지의 최소 가격을 기억하면서
- 현재 가격에서 최소 가격을 뺀 값(이익)이 최대가 되는 경우를 찾기
- 알고리즘 표 작성
minPrice = prices[0] (첫 가격을 최소값으로 설정)
maxProfit = 0 (최대 이익 초기화)
↓
현재 가격 prices[i] 확인
↓
prices[i]가 minPrice보다 작은지 확인
↓
yes -> minPrice 업데이트
↓
현재 가격 - 최소 가격 계산하여 maxProfit과 비교, 더 크면 업데이트
Step 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
};