[문제 링크]
int 배열 prices가 주어지고, prices[i]는 i번째 날의 주식 가격
주식은 하나만 살 수 있고, 구입 당일에 판매 가능
1과 달리 여러번 사고 팔 수 있음
얻을 수 있는 최고 이익을 반환
수익을 낼 수 없는 배열이라면 0을 반환
/**
* @param {number[]} prices
* @return {number}
*/
var maxProfit = function(prices) {
var res = 0;
for (let i = 1; i < prices.length; i++) {
var profit = prices[i] - prices[i - 1];
if (profit > 0)
res += profit;
}
return res;
};
배열을 전부 돌면서 현재 값과 이전 날의 값의 차이 구하기
만약 이득 (>0)이면 수익에 더한 후 반복문 끝나면 그대로 반환
그렇지 않은 경우 초기값 0 반환
Accepted
Runtime 52ms (Beats 73.17%)
Memory 49.16MB (Beats 74.86%)
어떻게 해야 빠르게 구할 수 있을까, DFS로 해야하나 고민하던 중 솔루션을 보니 대부분이 이런식으로 하나의 반복문만 돌고 있길래 이게 되려나? 하면서 머릿속으로 테스트 해보니 놀랍게도 모든 테스트케이스가 통과되었다. 일단 코드를 작성한 다음 왜 가능한지 생각해보니, 어느 날에 사고 파는지 알 필요 없이 배열 중에서 낼 수 있는 최대 수익을 구하는 것이었기 때문에 시간이 지나면서 (배열을 순회하면서) 생기는 이익은 모두 더하면 되는 일이었다...! 다시 한 번 생각의 전환에 놀라는 날이었고 나도 이렇게 공략법을 생각할 수 있는 날이 오기를 바라면서... 오늘은 이만