Best Time to Buy and Sell Stock II

zoovely·2024년 4월 16일
0
post-thumbnail

💬 문제

[문제 링크]
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로 해야하나 고민하던 중 솔루션을 보니 대부분이 이런식으로 하나의 반복문만 돌고 있길래 이게 되려나? 하면서 머릿속으로 테스트 해보니 놀랍게도 모든 테스트케이스가 통과되었다. 일단 코드를 작성한 다음 왜 가능한지 생각해보니, 어느 날에 사고 파는지 알 필요 없이 배열 중에서 낼 수 있는 최대 수익을 구하는 것이었기 때문에 시간이 지나면서 (배열을 순회하면서) 생기는 이익은 모두 더하면 되는 일이었다...! 다시 한 번 생각의 전환에 놀라는 날이었고 나도 이렇게 공략법을 생각할 수 있는 날이 오기를 바라면서... 오늘은 이만

profile
나도 할 수 있을까?

0개의 댓글