7장_12 배열(주식을 사고 팔기 가장 좋은 시점)
한번의 거래로 낼 수 있는 최대의 이익을 계산하라.
기대값이 5인 이유는 1일 때 사서 6에 팔면 5의 이익이 가장 크기 때문이다.
1. 브루트 포스로 계산
가장 간단한 방법은 브루트 포스로 사고 팔고를 반복하여 최대의 이익을 내는 값을 뽑아 내면 되는 방식이다.
from typing import List
class Solution:
def maxProfit(self, 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
하지만 이방식은 타임아웃으로 풀리지 않는다. 다른 방법이 필요하다.
2. 저점과 현재 값과의 차이 계산
현재 값을 가리키는 포인터가 우측으로 이동하면서 이전 상태의 저점을 기준으로 가격 차이를 계산하고, 만약 클 경우 최대 값을 계속 교체해나가면서 최대의 이익을 내는 방식을 사용하면 된다.
import sys
from typing import List
class Solution:
def maxProfit(self, prices: List[int]) -> int:
profit = 0
min_price = sys.maxsize
# 최소값과 최대값 계속 갱신
for price in prices:
min_price = min(min_price, price)
profit = max(profit, price - min_price)
return profit
Author And Source
이 문제에 관하여(7장_12 배열(주식을 사고 팔기 가장 좋은 시점)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@dongmin/7장12-배열주식을-사고-팔기-가장-좋은-시점저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)