Skip to content

Instantly share code, notes, and snippets.

@DongguemYoo
Last active July 11, 2020 05:16
Show Gist options
  • Save DongguemYoo/41b0bdc8e5e619b83931d0580dc6c9d1 to your computer and use it in GitHub Desktop.
Save DongguemYoo/41b0bdc8e5e619b83931d0580dc6c9d1 to your computer and use it in GitHub Desktop.
[코드잇] 삼송전자 주식 분석
실습과제
태호는 주식 분석이 취미입니다.
요즘 제일 핫한 종목은 삼송전자인데요. 삼송전자의 주식을 딱 한 번 사고 팔았다면 최대 얼마의 수익이 가능했을지 궁금합니다. 그것을 계산해 주는 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