문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음
배열 prices가 주어지고, prices[i]번째 날의 주식 가격을 나타낸다.
하나의 날을 선택해서 주식을 매수하고, 그 이후의 다른날을 선택해 매도해서 이익을 최대화하려고 한다.
이 거래를 통해 얻을 수 있는 최대 이익을 반환해라. 만약 어떤 이익도 얻을 수 없다면 0을 반환해라.
#1
Input: prices = [7, 1, 5, 3, 6, 4]
Output: 5
Explanation: 2번째 날(price = 1)일때 사고, 5번째 날(price = 6)일때 팔면 이익이 5가 된다.
#2
Input: prices = [7, 6, 4, 3, 1]
Output: 0
Explanation: 이 경우에 아무런 거래를 할 수 없어서 이익이 0이다.
첫날을 사는 날로 기준을 잡고, 이익을 0으로 잡는다. 이후 반복문을 통해서 사는 날의 가격보다 작으면 구매를 한다. 아니면 이후 날에서 산 가격을 뺐을때가 이익보다 크면 이익으로 바꿔주면 된다.
class Solution {
public int maxProfit(int[] prices) {
int buy = prices[0];
int profit = 0;
for(int i = 1; i < prices.length; i++){
if(prices[i] < buy){
buy = prices[i];
}else if(prices[i] - buy > profit){
profit = prices[i] - buy;
}
}
return profit;
}
}