-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Labels
Description
문제 설명 | Best Time to Buy and Sell Stock II
주식을 매일 거래할 수 있으며, 최대 한 주만 보유할 수 있을 때 얻을 수 있는 최대 이익을 구하는 문제입니다. 같은 날에 구매하고 판매하는 것도 가능
📝 제약조건
1 <= prices.length <= 3 * 10^40 <= 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
- Output:
문제 해결 과정
Step 1: 문제 이해하기
- 작은 예시로 직접 풀어보기:
[1,2,3]→ 매일 오르니 2의 이익[3,2,1]→ 계속 하락하니 0의 이익[1,2,1,3]→ 1→2 (이익1) + 1→3 (이익2) = 총 이익 3
Step 2: 접근 방법
-
직관적으로 생각하기
- 매일매일의 가격 변동을 확인
- 상승하는 구간에서는 항상 이익 실현 가능
- 하락하는 구간에서는 거래하지 않음
-
알고리즘 표 작성
i = 1 (첫째날부터 시작)
↓
오늘 가격(prices[i])과 어제 가격(prices[i-1]) 비교
↓
오늘 가격이 더 높다면
→ 이익(profit)에 차익 더하기
↓
i++ 하고 다시 처음으로
Step 3: 코드 설계
- 총 이익(profit) 변수 초기화
- 둘째날(i=1)부터 마지막날까지 순회:
- 당일 가격이 전일 가격보다 높으면
- 차익을 총 이익에 더함
- 최종 이익 반환
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
};