배열 숫자 주식 차익처럼 계산하기, 자바스크립트

라용·2022년 9월 27일
0

위코드 - 스터디로그

목록 보기
60/100
post-custom-banner

위코드 코드카타를 정리한 내용입니다.

문제

배열안의 각 요소들은 주식 가격입니다. 한번의 거래만 할 수 있을 때 가장 큰 이익을 구합니다.

// input
[7, 1, 5, 3, 6, 4]

// output
5
// 1일 때 샀다 6일 때 파는 것이 가장 큰 이득입니다. 

풀이

배열의 순서를 나누고 이중 for 문을 돌려 각 값들을 빼줍니다. 두번째 for 문의 인덱스는 i + 1 로 시작하고 기존 배열에서 i 를 뺀 만큼만 순회합니다. 이렇게 구한 차이 값이 0보다 크면 배열에 담고 작으면 0으로 반환한 후 해당 배열에서 가장 큰 값을 구하면 됩니다.

const maxProfit = arr => {
  let reArr = arr.reverse(); // 배열 순서 뒤집기
  let result = []; // 차이값 담을 빈 배열 생성
  for (let i = 0; i < reArr.length; i++) { // 첫번째 포문
    for (let j = i + 1; j < reArr.length - i; j++) { // 두번째 포문
      let gap = reArr[i] - reArr[j]; // i 와 i+1 의 값 차익 계산
      if (gap > 0) { // 차익이 0보다 크면
        result.push(gap)  // 배열에 담고
      }
      result.push(0) // 작으면 0을 담고
    }
  }
  return Math.max(...result) // 해당 배열의 가장 큰 값을 반환
}

아래처럼 중간중간 콘솔을 찍어보면 중간 과정을 조금 더 명확히 확인할 수 있습니다.

const maxProfit = arr => {
  let reArr = arr.reverse();
  console.log(reArr);
  let result = [];
  for (let i = 0; i < reArr.length; i++) {
    console.log("-------------------------", i)
    console.log("reArr[i] : ", reArr[i]);
    for (let j = i + 1; j < reArr.length - i; j++) {
      console.log("------")
      console.log("reArr[j]", reArr[j])
      let gap = reArr[i] - reArr[j];
      console.log("gap : ", gap)
      if (gap > 0) {
        result.push(gap)
      }
      result.push(0)
    }
  }
  return Math.max(...result)
}
profile
Today I Learned
post-custom-banner

0개의 댓글