<로직 고민/>
- Best Time to Buy and Sell Stock I에서 푼 풀이에서 조금만 바꾸면 될 것 같다
- 일단 profit 변수는 이익이 나는 경우에 profit 기존 값에 더해주는 걸로 수정한다
- 이익을 얻고 나면 buy값을 다음 인덱스 값으로 바꿔준다(일종의 초기화??)
- 나머진 똑같다
<완성된 풀이/>
class Solution:
def maxProfit(self, prices: List[int]) -> int:
buy, sell, profit = prices[0], 0, 0
for i in range(len(prices)-1):
if prices[i] < buy:
buy = prices[i]
if buy < prices[i+1]:
sell = prices[i+1]
if sell - buy > 0:
profit += sell - buy
if profit != 0:
buy = prices[i+1]
sell = 0
return profit
<다른 사람 풀이/>
- 천재풀이1
class Solution:
def maxProfit(self, a: List[int]) -> int:
ans=0
x=a[0]
for i in range(1,len(a)):
if(x>a[i]):
x=a[i]
else:
ans+=a[i]-x
x=a[i]
return ans
- 간단해 보인다...
- a[i]는 판매금액(=sell), x는 구매금액(=buy)
- 그냥 단순하네 판매금액이 구매금액보다 크면 팔고, 안 크면 구매금액을 다음 인덱스로 업데이트 하고
- 아니 그럼 [2,3,5,2,5]인 경우에
- 아 판매금액이 구매금액보다 클 때마다 팔든, 기다렸다가 제일 값이 많이 나갈 때 팔든 구매금액도 계속 업데이트 하니까 이익은 똑같구나...
- 뭐 이런 문제가..!!
<수정/>
class Solution:
def maxProfit(self, prices: List[int]) -> int:
buy, profit = prices[0], 0
for i in range(1, len(prices)):
if prices[i] < buy:
buy = prices[i]
else:
profit += prices[i] - buy
buy = prices[i]
return profit
- 고치고 보니 그냥 천재풀이1이랑 똑같.....