Last active
July 11, 2020 05:16
-
-
Save DongguemYoo/41b0bdc8e5e619b83931d0580dc6c9d1 to your computer and use it in GitHub Desktop.
[코드잇] 삼송전자 주식 분석
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
실습과제 | |
태호는 주식 분석이 취미입니다. | |
요즘 제일 핫한 종목은 삼송전자인데요. 삼송전자의 주식을 딱 한 번 사고 팔았다면 최대 얼마의 수익이 가능했을지 궁금합니다. 그것을 계산해 주는 O(n)O(n) 함수 max_profit을 작성하세요. | |
max_profit은 파라미터로 일별 주식 가격이 들어 있는 리스트 stock_prices를 받고 최대 수익을 리턴합니다. 주식은 딱 한 번만 사고 한 번만 팝니다. 그리고 사는 당일에 팔 수는 없습니다. | |
하나의 예시로, 지난 6일간 삼송전자의 주식 가격이 이렇다고 가정합시다. | |
max_profit([7, 1, 5, 3, 6, 4]) | |
이 기간 동안 낼 수 있는 최대 수익은 얼마일까요? 둘째 날 11에 사서 다섯째 날 66에 팔면 총 55의 수익이 생깁니다. | |
또 다른 예시를 봅시다. | |
max_profit([7, 6, 4, 3, 1]) | |
이 기간 동안 가능한 최대 수익은 얼마일까요? 이번에는 주식이 계속 떨어지기만 하네요. 하지만 꼭 한 번은 사고 팔아야 하기 때문에, 첫 날 77에 사고 둘째 날 66에 팔아서 나오는 -1−1이 최대 수익입니다. | |
정답 | |
def max_profit(stock_list): | |
stock_list = get_minList(stock_list) | |
#지금 가장 작은 인텍스 | |
l_index=0 | |
for i in range(0, len(stock_list)): | |
if min(stock_list) == stock_list[i]: | |
l_index = i | |
break | |
if len(stock_list)==2: | |
if l_index == len(stock_list)-1: | |
return stock_list[l_index] - stock_list[0] | |
else: | |
return stock_list[0] - stock_list[l_index] | |
min값뒤의 리스트의 가장 큰값과 현제 가장 작은값을 뺀다 | |
return max_value(stock_list[l_index+1:]) -stock_list[l_index] | |
# 코드를 작성하세요. | |
def max_value(list): | |
return max(list) | |
def min_value(list): | |
return min(list) | |
//가장 작은 값이 리스트의 가장 뒤에있다면 의미없는 리스트 이다 (계산을 해도 -값이 나올것이다.) | |
//의미 있는 리스트가 될때까지 재귀하여서 리턴한다. | |
def get_minList(stock_list): | |
if len(stock_list) == 2: | |
return stock_list | |
if min(stock_list) == stock_list[len(stock_list)-1]: | |
return get_minList(stock_list[:-1]) | |
return stock_list | |
# 테스트 | |
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])) | |
####코드잇 해답 | |
배운점 대소 비교를 민맥스를 이용해서 했다...제발 사용하자 | |
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])) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment