[Algorithm] 4주차 2번 문제

김상웅·2022년 6월 27일
0

[알고리즘]

목록 보기
14/18

✅ 문제


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
profile
누구나 이해할 수 있도록

0개의 댓글