Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript로 배열에서 세 번째로 작은 숫자 구하는 방법

이번 글에서는 JavaScript를 활용해 배열에서 세 번째로 작은 숫자를 찾는 방법을 알아보겠습니다.

문제 정의

길이가 최소 3 이상인 숫자 배열을 입력으로 받는 JavaScript 함수를 작성해야 합니다.

이 함수는 배열에서 세 번째로 작은 숫자를 반환해야 합니다.

해결 접근 방식

가장 직관적인 방법은 다음과 같습니다.

  • 원본 배열을 변경하지 않도록 복사본을 만듭니다.
  • 복사본에서 가장 작은 값을 두 차례에 걸쳐 제거합니다.
  • 남은 배열의 최솟값이 곧 세 번째로 작은 숫자가 됩니다.

예제 코드

다음은 위 로직을 구현한 코드입니다.

const arr = [6, 7, 3, 8, 2, 9, 4, 5];

const thirdSmallest = () => {
  const copy = arr.slice(); // 원본 배열 보존을 위해 복사
  
  // 가장 작은 값 두 개를 제거
  for (let i = 0; i < 2; i++) {
    const minIndex = copy.indexOf(Math.min(...copy));
    copy.splice(minIndex, 1);
  }
  
  // 남은 값 중 최소값 = 세 번째로 작은 숫자
  return Math.min(...copy);
};

console.log(thirdSmallest(arr)); // 4

실행 결과

4

배열 [6, 7, 3, 8, 2, 9, 4, 5]에서 가장 작은 값은 2, 두 번째로 작은 값은 3입니다. 이 두 값을 제거하면 남은 값들 중 최소값인 4가 세 번째로 작은 숫자가 됩니다.

대안: 정렬을 활용한 간단한 방법

코드의 가독성을 높이고 싶다면 배열을 오름차순으로 정렬한 뒤 인덱스로 접근하는 방법도 사용할 수 있습니다.

const thirdSmallestSorted = arr => [...arr].sort((a, b) => a - b)[2];

console.log(thirdSmallestSorted([6, 7, 3, 8, 2, 9, 4, 5])); // 4

정렬 방식은 코드가 훨씬 간결하다는 장점이 있지만, 전체 배열을 정렬하기 때문에 시간 복잡도는 O(n log n)입니다. 반면 첫 번째 방식은 최솟값 탐색만 반복하므로 상황에 따라 더 효율적일 수 있습니다.

마무리

이처럼 JavaScript에서는 Math.min(), indexOf(), splice() 또는 sort()를 조합하여 k번째로 작은 숫자를 손쉽게 구할 수 있습니다. 배열의 크기와 성능 요구 사항에 맞는 방법을 선택하시기 바랍니다.