본문 바로가기

알고리즘풀이

LeetCode: Best Time to Buy and Sell Stock II

문제설명

  • 가격이 담긴 배열, prices가 주어졌을 때, prices[i]는 i번째 날의 주식의 가격을 의미한다.
  • 주어진 배열 내에서 주식을 사고 팔 수 있는 최대 수익을 계산하라.

문제풀이

  • 다양한 방법이 있지만, 동적 프로그래밍으로 풀 수 있다.
  • 이전의 주식 가격과 비교하기 위해, 배열의 0번째가 아닌 1번째 부터 순회한다.
  • 이전 주식 가격에 현재 가격을 빼서 수익이 0 이상 일 때, 이전의 수익 값과 더한다.
  • 수익이 0 이하라면, 이전의 수익 값을 그대로 복사한다.
  • 가장 마지막에 계산된 수익 값을 반환한다.
func maxProfit(_ prices: [Int]) -> Int {
    var profits = [0]

    for i in 1..<prices.count {
        let profit = prices[i] - prices[i-1]
        if profit > 0 {
            profits.append(profits[i-1] + profit)
        } else {
            profits.append(profits[i-1])
        }
    }
    return profits[profits.count-1]
}

print(maxProfit([7,1,5,3,6,4])) // 7
print(maxProfit([1,2,0,3,4,0,5])) // 10
print(maxProfit([1,2,3,4,5])) // 4
print(maxProfit([7,6,4,3,1])) // 0

'알고리즘풀이' 카테고리의 다른 글

LeetCode: Contains Duplicate  (0) 2021.03.30
LeetCode: Rotate Array  (0) 2021.03.29
LeetCode: Remove Duplicates from Sorted Array  (0) 2021.03.27
LeetCode: Missing Number  (0) 2021.03.26
LeetCode: Valid Parentheses  (0) 2021.03.25