prices
는 배열입니다.
prices
의 각 요소는 매일의 주식 가격입니다.
만약 한 번만 거래할 수 있다면 = 사고 팔 수 있을 떄 가장 큰 이익을 반환하는 프로그램을 작성해주세요.
예를 들어,
Input: [7,1,5,3,6,4]
Output: 5
설명:
2일(가격=1)에 샀다가 5일(가격=6)에 사는 것이 6-1이라 제일 큰 수익 7-1=6 은 안 됩니니다. 먼저 사야 팔 수 있기 떄문입니다.
Input: [7,6,4,3,1]
Output: 0
설명: 여기서는 매일 가격이 낮아지기 때문에 거래가 없습니다. 그래서 0
을 반환합니다.
이번 문제 풀이는 네개의 변수를 사용하였습니다.
#1-1
우선 배열에서 가장 작은 값 (min_num
)과 그 값의 위치인 index (idx
)를 구해줍니다.
#1-2
만약 배열에서 가장 작은 값이 마지막 index에 위치한다면, 매일 가격이 낮아지고 있는 주식장이기 때문에 주식을 살 수 없어 0
을 반환합니다.
#2
#1-1을 통과하여 배열 중 가장 작은 값부터 마지막 index까지 배열을 슬라이싱하여 max()
함수를 사용하여 최댓값 (max_num
)을 구해줍니다.
#3
최댓값 (max_num
)에서 최솟값 (min_num
)을 뺸 값을 반환합니다.
코드로 알아보겠습니다.
def answer(prices) :
result = 0
min_num = prices[0]
idx = 0
for i in range(len(prices)):
#1-1
if min_num > prices[i] :
min_num = prices[i]
idx = i
#1-2
if min == prices[-1] :
return result
#2
max_num = max(prices[idx:])
#3
result = max_num - min_num
return result