이 글은 "파이썬 알고리즘 인터뷰 (박상길 지음)"을 읽고 주관적으로 요약한 글입니다.
문제 정의
한 번의 거래로 낼 수 있는 최대 이익을 산출하라
책에서 구현된 코드
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
기억해야할 기법
- 최소값을 최대값으로 지정
- sys.maxsize
- 더 작은 값, 더 큰 값으로 업데이트할 경우
- if문이 아닌 min / max를 활용하여 가독성을 높일 것
- min_price가 현재값(price)보다 무조건 작거나 같음이 보장되므로, 음수에 대한 처리를 할 필요가 없음
내가 구현한 코드
def update(x, y, profit):
if x < y and y - x > profit:
return y - x
return profit
def best_stock(prices: list[int]) -> int:
if len(prices) < 1:
return 0
min_num = prices[0]
profit = 0
for i in range(1, len(prices)):
crnt = prices[i]
nw_profit = update(min_num, crnt, profit)
if profit < nw_profit:
profit = nw_profit
if crnt < min_num:
min_num = crnt
return profit
- 속도에서 약간 차이가 나는 이유를 알아봐야할 것
- 가독성의 차이가 매우 크다
- 내가 구현한 알고리즘
- 책에서 구현한 알고리즘
'책읽기' 카테고리의 다른 글
[쉽게 배우는 운영체제](요약)[Part-2][Ch-3] 프로세스와 스레드 (0) | 2021.07.20 |
---|---|
[스프링 인 액션][Part-1 스프링 기초][Ch-2] 웹 애플리케이션 개발하기 (0) | 2021.07.20 |
[파이썬 알고리즘 인터뷰][배열] 자신을 제외한 배열의 곱 (0) | 2021.07.19 |
[파이썬 알고리즘 인터뷰][배열] 배열 파티션1 (0) | 2021.07.19 |
[파이썬 알고리즘 인터뷰][배열] 세 수의 합 (중요) (0) | 2021.07.19 |