prices는 배열이며, 각 요소는 매일의 주식 가격입니다. 만약 한 번만 거래할 수 있다면 = 사고 팔 수 있다면, 제일 큰 이익은 얼마일까요?
Input: [7,1,5,3,6,4]
Output: 5
설명:
2일(가격=1)에 샀다가 5일(가격=6)에 사는 것이 6-1이라 제일 큰 수익
7-1=6 은 안 되는거 아시죠? 먼저 사야 팔 수 있습니다.
Input: [7,6,4,3,1]
Output: 0
설명:
여기서는 매일 가격이 낮아지기 때문에 거래가 없습니다. 그래서 0
def maxProfit(prices):
min_index = prices.index(min(prices))
max_index = prices.index(max(prices[min_index:]))
if min_index == max_index:
return 0
else:
return prices[max_index] - prices[min_index]
최소값의 index를 구하고 그 index의 오른쪽에 최댓값이 있어야 하므로(먼저 사야 팔 수 있으므로) 슬라이싱을 사용해서 가장 작은 수의 오른쪽에서 최댓값을 찾는다. 만약 오른쪽에 더이상 최소값보다 큰 값이 없다면 최댓값은 이미 구한 최솟값과 같을 것이므로 min_index
와 max_index
가 같다면 0을 return한다.
def maxProfit(prices):
max_profit, min_price = 0, float('inf')
for price in prices:
min_price = min(min_price, price)
profit = price - min_price
max_profit = max(max_profit, profit)
return max_profit
실수 데이터에는 양의 무한대와 음의 무한대가 있다. 양의 무한대와 음의 무한대를 나타내는 데이터는 각각 float('inf')와 float('-inf')라는 표현을 이용해 만든다. 무한대는 다른 모든 수보다 크거나, 다른 모든 수보다 작은 수를 표현해야 할 때 사용할 수 있다.(https://python.bakyeono.net/chapter-4-2.html)