프로그래밍/[ Python ]
[배열] 주식을 사고팔기 가장 좋은 시점
gooooooood
2021. 1. 17. 11:39
반응형
* leetcode 121. Best Time to Buy and Sell Stock
Q. 한 번의 거래로 낼 수 있는 최대 이익을 산출하라.
# 입력
[7, 1, 5, 3, 6, 4]
# 출력
5
# 1일 때 사서 6일 때 팔면 최대 5의 이익을 얻는다.
풀이 1. 브루트 포스로 계산
# O(n^2)로 사고 팔고를 반복하여 최대 이익을 구한다.
def maxProfit(prices: List[int]) -> int:
max_price = 0
for i, price in enumerate(prices):
for j in range(i, len(prices)):
max_price = max(prices[j] - price, max_price)
return max_price
이 풀이법은 시간 복잡도가 O(n^2)으로 비효율적이다. 따라서 다음 풀이법을 사용해야 한다.
풀이 2. 저점과 현재 값과의 차이 계산
def maxProfit(prices: List[int]) -> int:
profit = 0
min_price = sys.maxSize
# 최솟값과 최댓값 계속 갱신
for price in prices:
min_price = min(min_price, price) # 현재값이 최솟값보다 작으면 최솟값을 갱신
profit = max(profit, profit - min_price) # 갱신된 최솟값으로 이익 최댓값 갱신
return profit
반응형