Leetcode Java Best Time to Buy and Sell Stock with Cooldown
업데이트:
문제
코드
class Solution {
public int maxProfit(int[] prices) {
int sold = 0;
int hold = Integer.MIN_VALUE;
int rest = 0;
for (int price : prices) {
hold = Math.max(hold, rest - price);
rest = Math.max(rest, sold);
sold = hold + price;
}
return Math.max(sold, rest);
}
}
결과
설명
- 주어진 정수 배열 prices를 이용하여 최대 이익을 낼 수 있는 금액을 구하는 문제이다.
- 단, 판매 이후 하루는 주식 매매가 불가능하다.
- 문제 풀이에 필요한 변수를 정의한다.
- sold는 매매한 이익을 담는 변수로 0으로, 초기화한다.
- hold는 매매하지 않았을 경우 차익을 저장할 변수로, Integer의 최소값으로 초기화한다.
- rest는 아무것도 하지 않았을 경우 이익을 저장하기 위한 변수로, 0으로 초기화한다.
- prices를 반복하여 최대 이익을 구한다.
- hold에 hold와 차익이 되는 $rest - price$의 값 중 큰 값을 넣어준다.
- rest에 rest와 sold의 값 중 큰 값을 넣어준다.
- sold에 매매 이익이 되는 $hold + price$ 값을 넣어준다.
- 반복이 완료되면 마지막으로 매매를 한 경우인 sold와 매매하지 않았을 경우인 rest중 큰 값이 최대 이익이므로, 해당 값을 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기