[LeetCode | Javascript] Best Time to Buy and Sell Stock II

박기영·2023년 8월 24일

LeetCode

목록 보기
11/41

solution

/**
 * @param {number[]} prices
 * @return {number}
 */
var maxProfit = function(prices) {
    let profit = 0;

    for(let i = 1; i < prices.length; i++){
        if(prices[i-1] < prices[i]){
            profit += prices[i] - prices[i-1];
        }
    }

    return profit;
};

고민의 시간에 비해 너무나도 허무하게 해결된 문제이다.
정말 수없이 코드를 고쳐봤지만, 간단한 사고로 해결이 되었다.

최대의 이익을 얻는 방법은 간단하다.
이익이 발생하는 모든 부분에서 이익을 취할 것.
즉, 이전 가격보다 올랐으면 그 차이를 이익으로 취하면 된다.
그 이익들을 모두 더하면 주어진 주식 배열에서 최대의 이익을 얻을 수 있다.
또한 같은 날에 팔 수도, 살 수도 있기 때문에 모든 접점에서 이익을 얻을 수 있다.

이런 방법을 greedy 알고리즘이라고 한다.
매 순간 최선을 선택을 하는 것으로 결과를 얻어내는 것이다.
주식은 매 순간 선택을 할 수 있고, 두 지점 사이의 거래가 다른 지점 사이의 거래에 영향을 주지 않으므로
정말 적합한 알고리즘이었다고 생각한다.

다른 분들의 풀이도 살펴봤는데, 대다수의 분들이 greedy 알고리즘을 사용하셨다.
dynamic programming 알고리즘을 사용하는 분도 계셨지만,
코드의 간결성과 알고리즘의 취지에 부합하는 것은 greedy 쪽이라고 생각된다.

profile
나를 믿는 사람들을, 실망시키지 않도록

0개의 댓글