본문 바로가기
D.evelop [CS]/Algorithm

[Algorithm 015] JS - maxProfit

by Danne 2021. 10. 12.

Q.  prices는 배열이며, 각 요소는 매일의 주식 가격입니다. 만약 한 번만 거래할 수 있다면 = 사고 팔 수 있다면, 제일 큰 이익은 얼마일까요?

  • 설명: 2일(가격=1)에 샀다가 5일(가격=6)에 사는 것이 6-1이라 제일 큰 수익 7-1=6 은 안 되는거 아시죠? 먼저 사야 팔 수 있습니다.
Input: [7,1,5,3,6,4]
Output: 5
  • 설명: 여기서는 매일 가격이 낮아지기 때문에 거래가 없습니다. 그래서 0
Input: [7,6,4,3,1]
Output: 0

 

 

 

A.  답

const maxProfit = prices => {
  const arr = [];
  for ( i = 0 ; i < prices.length ; i++ ){
    for ( j = 1 ; j < prices.length ; j++ ){
    
     if( i < j && prices[i] < prices[j] ){
       arr.push( prices[j] - prices[i] )
     }
     
    }
  }
  return arr.length > 0 ? Math.max(...arr) : 0
};

maxProfit([7,1,5,3,6,4])    // 5

1. 배열의 각 index값이 중복되지 않게 비교한다.

2. 주식을 사야 팔수 있기 때문에 i를 산 날이라 가정하고 i가 j보다 빠를 때, 즉 첫 인덱스(i)가 두 번째(j) 보다 작아햐한다.

3. 값이 낮을 때사고 비쌀 때 팔아야 이득이므로 산 날의 값(prices[i])이 판 날의 값(prices[j])보다 작아야한다.

4. 2, 3을 만족하는 값을 새로운 배열 arr에 push한다.

5. 수익이 나지 않았을 때는 0을 return할 수 있게한다.

- 빈 배열 []은 Truthy(boolean에서 true)값이므로 length값을 사용해 false값을 구분한다.

 

 

 

 

 

 

 

반응형

댓글