leetcode

121 and 122. Best Time to Buy and Sell Stock II

냠냠맨 2023. 1. 17. 16:26

⚡문제정보

예전에 코딩테스트 볼 때 같은 문제가 나온 적 있었는데

따흐흑 하면서 못풀었던 기억이 있는 문제입니다.

지금 생각해보면 easy일만 하네요

 

간단하게 생각해서 prices[i]와 이전 값들 중 최저값인 값을 비교하면서

prices[i]가 더 작은 값이라면 최저값으로 prices[i]를 넣어 갱신시켜주고

아니라면 팔았을때 얼마 이득인지 비교해주면서 max값을 집어넣어주면 될것입니다.


🔍나의 풀이

var maxProfit = function(prices) {
    let [answer,buy] = [0,Infinity]
    for(i=0 ; i<prices.length ; i++) {
        if(buy > prices[i]) {
            buy = prices[i]
        }
        else {
            answer = Math.max(answer , prices[i]-buy)
        }
    }
    return answer
};

위 문제와 비슷한데 위 문제의 경우 한번만 사고팔수있었던것에 비해

당일 매수매도를 동시에 할수있으면서 매수매도 횟수 제한이 없는 조건입니다.

매수매도횟수제한이 없고 당일매수매도가 가능하다면

탐욕법으로 최적해를 도출할 수 있을것입니다. 

조금이라도 이익이 생기면 팔고 당일매수매도가 되니까

내일가격이 오늘 가격보다 적을때만 매수를 안하면 될것입니다.

var maxProfit = function(prices) {
    let answer = 0
    for(i=1 ; i<prices.length ; i++) {
        if(prices[i] > prices[i-1]) {
            answer += prices[i] - prices[i-1] 
        }
    }
    return answer
};

오늘 가격이 어제 가격보다 적을때만

answer에 오늘 가격빼기 어제가격을 한 값을 넣어줬습니다.

반응형