Leetcode Java Best Time to Buy and Sell Stock III
업데이트:
문제
코드
class Solution {
public int maxProfit(int[] prices) {
int[] buy = new int[] { Integer.MAX_VALUE, Integer.MAX_VALUE };
int[] sell = new int[2];
for (int price : prices) {
buy[0] = Math.min(buy[0], price);
sell[0] = Math.max(sell[0], price - buy[0]);
buy[1] = Math.min(buy[1], price - sell[0]);
sell[1] = Math.max(sell[1], price - buy[1]);
}
return sell[1];
}
}
결과
설명
-
주식에 대한 가격 정보를 담은 배열 prices를 이용하여 이익이 되는 값들 중 두 값의 합이 최대인 값을 구하는 문제이다.
-
두 값의 합이 최대인 값을 구해야 하므로, 구매와 판매 가격을 저장할 buy와 sell을 크기 2의 정수 배열로 정의한다.
- 주어진 배열 prices를 반복하여 두 값의 합이 최대인 구간을 찾는다.
- 첫 번째 구매 가격인 buy[0]는 buy[0]와 price 중 최소값으로 넣어준다.
- 첫 번째 판매 이익인 sell[0]는 sell[0]와 $price - buy[0]$ 중 최대값으로 넣어준다.
- 두 번째 구매 가격인 buy[1]은 buy[1]과 $price - sell[0]$ 중 최소값으로 넣어준다.
- 두 번째 판매 이익인 sell[1]은 sell[1]과 $price - buy[1]$ 중 최대값으로 넣어준다.
- 두 번째 거래의 경우, 첫 번째 거래의 판매 이익을 두 번째 구매 비용에 통합하여 두 번째 판매 이익이 결국 두 판매 이익을 합친 결과가 되는 것이다.
- 반복이 완료되면 두 판매 이익을 저장한 sell[1]을 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기