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값을 구분한다.
반응형
'D.evelop [CS] > Algorithm' 카테고리의 다른 글
[Algorithm 017] JS - 숫자 문자열과 영단어 (2021 카카오 채용연계형 인턴십) (0) | 2021.11.03 |
---|---|
[Algorithm 016] JS - Bubble Sort 버블정렬 (0) | 2021.11.02 |
[Algorithm 014] JS - factorial (0) | 2021.10.09 |
[Algorithm 013] JS - complexNumberMultiply (0) | 2021.10.06 |
[Algorithm 012] JS - reverseString (0) | 2021.10.05 |
댓글