[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];
};
  1. 각 날짜의 주식 가격이 담긴 배열 prices를 이중으로 순회하면서 가능한 모든 날짜 조합의 차익을 profitArr 배열에 push
  2. 이익중 가장 큰 가격을 리턴해야하므로 profitArr배열을 내림차순 정렬한 후 가장 첫번째 요소를 반환


결과👇

Screenshot 2022-06-05 at 17.07.06.png


해답

Screenshot 2022-06-05 at 17.10.18.png

내가 놓친 부분✍️

  1. prices[i]와 prices[j]를 비교할 때 j는 i보다 항상 커야하므로 두번째 for문에서는 index 0이 아니라 i+1 부터 순회해야함
  2. 이익이 없거나 마이너스인 경우도 있을 수 있기때문에 prices[j]가 prices[i]보다 큰 경우에만 차익을 push하고 그렇지 않은 경우는 0을 push하는 조건을 달아줘야함