본문 바로가기

알고리즘풀이

LeetCode: Best Time to Buy and Sell Stock

문제설명

  • 인자로 정수 배열이 주어진다.
  • 배열의 각 항목은 날짜의 순서대로 나열되있으며, 주식의 가격을 의미한다.
  • 배열 중 하루를 선택하고 다른 날짜에 주식을 팔아서 가장 크게 수익이 나는 가격을 반환하라.
  • 수익이 0보다 크지 않으면, 0을 반환하라

문제풀이

  • 배열을 순회하면서 가장 가격이 저렴한 날짜를 선별한다.
  • 가장 저렴한 날짜와 현재 순회하고 있는 주식 가격의 시세 차이를 계산한다.
  • 이렇게 계산한 값과 이전에 저장된 수익을 비교하여 가장 큰 값을 저장한다.
func maxProfit(_ prices: [Int]) -> Int {
    var buyAt = 0
    var maxProfit = 0
    for i in 1..<prices.count {
        if prices[i] < prices[buyAt] {
            buyAt = i
        }
        maxProfit = max(prices[i] - prices[buyAt], maxProfit)
    }
    return maxProfit
}

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