[codekata]Week4_Day2
문제
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
내 풀이
const maxProfit = prices => {
const profitArr = [];
for (let i = 0; i < prices.length; i++) {
for (let j = 0; j < prices.length; j++) {
profitArr.push(prices[j] - prices[i])
}
}
profitArr.sort((a, b) => {return b - a});
return profitArr[0];
};
- 각 날짜의 주식 가격이 담긴 배열 prices를 이중으로 순회하면서 가능한 모든 날짜 조합의 차익을 profitArr 배열에 push
- 이익중 가장 큰 가격을 리턴해야하므로 profitArr배열을 내림차순 정렬한 후 가장 첫번째 요소를 반환
결과👇
해답
내가 놓친 부분✍️
- prices[i]와 prices[j]를 비교할 때 j는 i보다 항상 커야하므로 두번째 for문에서는 index 0이 아니라 i+1 부터 순회해야함
- 이익이 없거나 마이너스인 경우도 있을 수 있기때문에 prices[j]가 prices[i]보다 큰 경우에만 차익을 push하고 그렇지 않은 경우는 0을 push하는 조건을 달아줘야함