리트코드, Best Time to Buy and Sell Stock_주식을 사고팔기 가장 좋을 때
TL;DR
- 주어진 배열을 순회하며 문제의 조건을 구현할 수 있는지
문제 분석
1. i번째 날 주어진 주식의 가격이 담긴 배열 prices가 주어진다.
2. 가장 주식이 쌀 때 구매하고 싶고, 미래에 가장 값이 비쌀 때 주식을 판매하고 싶다.
3. 그 때의 최대 수익을 반환하라. 만약 수익을 창출할 수 없다면 0을 반환하라.
입출력 형태
- 일 별 주식의 가격이 담긴 배열 prices가 주어진다.
- 예시 1 :
- 주식이 가장 저렴한 1일때 사서, 그 이후 미래에 가장 비쌀 때인 6일 때 팔면 최대 수익인 5를 얻을 수 있다.
- 예시 2:
- 어느 시점에 주식을 사던, 수익을 창출할 수 없다. 따라서 0을 반환한다.
풀이
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
- 브루트 포스를 사용해서 2중 반복문을 사용할 수 있지만 배열의 길이가 1 이상 10_000이라는 조건 때문에 문제를 해결할 수 없다.
- 배열을 인덱스에 따라 진행하며 각 점에서의 최저값과 수익을 갱신한다.
반응형
'개발 > Algorithm' 카테고리의 다른 글
[리트코드] Palindrome Linked List(python) (0) | 2021.06.07 |
---|---|
[프로그래머스] 피보나치 수(python) (0) | 2021.06.06 |
[리트코드] Product of Array Except Self(python) (0) | 2021.06.04 |
[리트코드] Array Partition 1(python) (0) | 2021.06.03 |
[리트코드] 3Sum(python) (0) | 2021.06.03 |