문제설명
- 가격이 담긴 배열, 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