리트코드 122번
주식 차트를 보고 낼 수 있는 가장 많은 수익 구하기
매번 상승세일 때 마다 이익을 봐야 최대 이익을 구할 수 있다!
class Solution:
def maxProfit(self, prices: List[int]) -> int:
min_price = sys.maxsize
max_profit = 0
total = 0
for price in prices:
min_price = min(price, min_price)
profit = price - min_price
max_profit = max(max_profit, profit)
if max_profit > profit: # 하락세로 바뀌는 지점 : 이익 저장해주고 초기화
min_price = price
total += max_profit
max_profit = 0
return total + max_profit
내가 풀었지만 생각보다 복잡하다...
그리디 답게 좀더 쪼개서 그 순간순간 판단할 수는 없을까.. 앞에 풀이는 상승세를 뭉텅이로 생각해서 그 범위를 구하기위해 코드가 복잡해졌지만 사실 그냥 이전값보다 크면 그 차이를 더해주면 똑같다....
쪼갤 수 있는 한 제일 쪼개주는게 좋은 것 같다!
class Solution:
def maxProfit(self, prices: List[int]) -> int:
total = 0
for i in range(1,len(prices)):
if prices[i] > prices[i-1]:
total += prices[i] - prices[i-1]
return total
최적화
아래 처럼 차이가 음수가 나오면(손해면) 0을 더해주기 하한을 정해줘서 간단하게 처리해 줄 수도 있다.
class Solution:
def maxProfit(self, prices: List[int]) -> int:
total = 0
for i in range(1,len(prices)):
total += max(prices[i] - prices[i-1] , 0)
return total