JS 배열에서 peak 값 추출하기

우디·2024년 3월 4일
0
post-thumbnail

안녕하세요:) 개발자 우디입니다! 아래 내용 관련하여 작업 중이신 분들께 도움이되길 바라며 글을 공유하니 참고 부탁드립니다😊
(이번에 벨로그로 이사오면서 예전 글을 옮겨적었습니다. 이 점 양해 부탁드립니다!)

작업 시점: 2022년 9월

배경

  • 특정 배열을 데이터로 그려진 그래프에서 유의미한 지점을 5개 뽑아내야 하는 상황임.
  • 그냥 수치 높은 부분 5개로 할 경우 한 쪽에 몰려서 추출되는 현상 발생 → 피크(peak) 값을 추출할 경우에는 다양한 구간이 추출되고, 피크 자체로도 유의미한 것으로 관찰되어서 이 방식으로 진행.

배열에서 피크 값 추출하기

const getPeakFromArr = arr => {
  let peakObj = [];
  if (arr.length > 2) {
    let pos = -1;
    for (let idx in arr) {
      if (arr[idx] > arr[idx - 1]) {
        pos = idx;
      } else if (arr[idx] < arr[idx - 1] && pos !== -1) {
        peakObj.push({ idx: pos, val: arr[pos] });
        pos = -1;
      }
    }
  }
  return peakObj;
};
  • getPeakFromArr 함수 정의
    • 3개 요소일 경우부터 피크 값이 의미있을 것이기 때문에, 3개 이상인 경우만 고려함.
    • 피크인 지점의 핵심은 이전 값 보다 현재의 값이 증가하고, 현재의 값보다 다음 값이 감소하는 형태가 되어야 한다는 것임.
    • 인자로 받은 배열을 반복문 돌면서 인덱스로 작업 진행.
      • 현재 인덱스에서의 배열 값이 이전 인덱스에서의 배열 값보다
        • 클 경우(증가한 경우)
          • pos 값을 현재 idx로 변경 후 다음 idx로 넘어감
        • 작을 경우 (감소한 경우)
          • pos가 -1인 경우
            • 증가한 경우에는 무조건 pos 값이 변경되어야 하기 때문에, 이 경우에는 증가하지 않은 것임 → 증가한 적이 없으므로 피크 값에 해당하지 않음 → 그냥 다음 idx로 넘어감.
          • pos가 -1이 아닌 경우
            • pos가 변경됐다는 건 증가했었다가 감소했다는 의미이므로 피크 값으로 추가.
            • 추가 완료 후 pos를 다시 -1로 초기화.
profile
넓고 깊은 지식을 보유한 개발자를 꿈꾸고 있습니다:) 기억 혹은 공유하고 싶은 내용들을 기록하는 공간입니다

0개의 댓글