Algorithm(알고리즘)/백준
06. 주식 최대 수익 함수
반응형
04. 주식 최대 수익 함수
예) [5, 1, 3, 6] 1에 사서 6에 팔면 최대 수익이다
풀이 1) Brute Force (O(n^2))
def max_profit(stock_list):
# 현재까지의 최대 수익
max_profit_so_far = stock_list[1] - stock_list[0]
# 한 번 사고 파는 모든 조합을 본다
for i in range(len(stock_list) - 1):
for j in range(i + 1, len(stock_list)):
# i에서 사고 j에 파는 것이 현재까지의 최대 수익이라면 max_so_far을 바꾼다
max_profit_so_far = max(max_profit_so_far, stock_list[j] - stock_list[i])
return max_profit_so_far
# 테스트
print(max_profit([7, 1, 5, 3, 6, 4]))
print(max_profit([7, 6, 4, 3, 1]))
print(max_profit([11, 13, 9, 13, 20, 14, 19, 12, 19, 13]))
print(max_profit([12, 4, 11, 18, 17, 19, 1, 19, 14, 13, 7, 15, 10, 1, 3, 6]))
#결과
5
-1
11
18
풀이 2) 시간복잡도 O(n) <-- 최선의 답
def max_profit(stock_list):
# 현재까지의 최대 수익
max_profit_so_far = stock_list[1] - stock_list[0]
# 현재까지의 최소 주식 가격
min_so_far = min(stock_list[0], stock_list[1])
# 주식 가격을 하나씩 확인한다
for i in range(2, len(stock_list)):
# 현재 파는 것이 좋은지 확인한다
max_profit_so_far = max(max_profit_so_far, stock_list[i] - min_so_far)
# 현재 주식 가격이 최솟값인지 확인한다
min_so_far = min(min_so_far, stock_list[i])
return max_profit_so_far
# 테스트
print(max_profit([7, 1, 5, 3, 6, 4]))
print(max_profit([7, 6, 4, 3, 1]))
print(max_profit([11, 13, 9, 13, 20, 14, 19, 12, 19, 13]))
print(max_profit([12, 4, 11, 18, 17, 19, 1, 19, 14, 13, 7, 15, 10, 1, 3, 6]))
#결과
5
-1
11
18
반응형
'Algorithm(알고리즘) > 백준' 카테고리의 다른 글
01_ 백준 10869 파이썬 사칙연산 (0) | 2021.06.17 |
---|---|
07. 계단오르는 경우의 수 구하기 (0) | 2021.05.22 |
05. 투자의 귀재, 합 구간이 가장 큰 함수 (0) | 2021.05.22 |
04. 첫번째로 중복되는 항목 찾기 1 (0) | 2021.05.22 |
03. 빠르게 산 오르기(약수터문제) (0) | 2021.05.16 |
댓글