가격 배열 가격이 주어지며, 가격[i]는 해당 날짜에 지정된 주식의 가격입니다.
매일 주식을 매수 및/또는 매도할 수 있습니다. 한 번에 최대 한 종목의 주식만 보유할 수 있습니다. 그러나 매수한 후 같은 날 즉시 매도할 수 있습니다.
달성할 수 있는 최대 수익을 찾아서 반환하세요.
그래프가 있다면, 단조 증가하는 구간의 차를 구해 더하면 될 것이다.
첫번 째 예시를 그래프로 그려보게 된다면 위와 같이 좌표 평면상에 그릴 수 있고, 단조 증가하는 구간을 두 곳 찾을 수 있다.
즉 2개의 포인터로, 감소하기 전까지의 구간을 찾아 차이를 더한 값을 구한다.
class Solution {
public int maxProfit(int[] prices) {
int profit = 0;
int buyIndex = 0;
for (int sellIndex = 0; sellIndex < prices.length - 1; sellIndex++) {
if (prices[sellIndex + 1] < prices[sellIndex]) {
profit += prices[sellIndex] - prices[buyIndex];
buyIndex = sellIndex + 1;
}
}
profit += prices[prices.length - 1] - prices[buyIndex];
return profit;
}
}
prices.length 를 뽑아낸 코드이다.
class Solution {
public int maxProfit(int[] prices) {
int profit = 0;
int buyIndex = 0;
int length = prices.length;
for (int sellIndex = 0; sellIndex < length - 1; sellIndex++) {
if (prices[sellIndex + 1] < prices[sellIndex]) {
profit += prices[sellIndex] - prices[buyIndex];
buyIndex = sellIndex + 1;
}
}
profit += prices[length - 1] - prices[buyIndex];
return profit;
}
}
위의 설명처럼, buyIndex와 for 문에서 sellIndex로 2개의 포인터를 이용하여 위에서 언급한 대로 풀 수 있었다.