언제든 주식을 사고 팔 수 있는 상황에서 가장 많은 수익을 냈을 때의 값을 찾는 문제이다. 이 문제는 그리디 방식으로 풀었다.
주식을 살 수 있을 때 최대한 싼 주식으로 사고, 팔 수 있을 때는 무조건 팔면서 수익을 극대화하면 된다.
산 주식을 리스트의 첫 번째 원소로 지정해준다.
for문으로 리스트의 두 번째 원소부터 탐색한다.
현재 인덱스에서 주식을 팔았을 때 이득이면 팔고, 총 수익에 더해준다.
그리고 다시 현재 주식을 산다.
이득이 아니면 산 주식과 현재 인덱스의 주식 중 싼 주식을 산 주식으로 해준다.
총 수익을 return 해준다.
class Solution:
def maxProfit(self, prices: List[int]) -> int:
total = 0
buy = prices[0] ## 1. 산 주식을 리스트의 첫 번째 원소로 지정해준다.
for i in range(1, len(prices)): ## 2. for문으로 리스트의 두 번째 원소부터 탐색한다.
if prices[i]- buy > 0: ## 3. 현재 인덱스에서 주식을 팔았을 때 이득이면 팔고, 총 수익에 더해준다.
total += prices[i] - buy
buy = prices[i] ## 4. 그리고 다시 현재 주식을 산다.
else:
buy = min(buy, prices[i]) ## 5. 이득이 아니면 산 주식과 현재 인덱스의 주식 중 싼 주식을 산 주식으로 해준다.
return total ## 6. 총 수익을 return 해준다.