이번 글에서는 Math.min() 같은 내장 라이브러리 함수를 사용하지 않고, n개의 숫자 리터럴을 인자로 받아 그중 가장 작은 값을 반환하는 함수를 작성해 보겠습니다. 여기서 n은 임의의 자연수입니다.
접근 방법
핵심 아이디어는 간단합니다. 변수 하나를 무한대(Infinity)로 초기화한 뒤, 배열의 모든 요소를 순회하면서 현재 값이 저장된 최솟값보다 작으면 그 값을 새로운 최솟값으로 교체하는 방식입니다. 이 과정은 while 반복문을 사용해 구현할 수 있습니다.
예제 코드
const numbers = [12, 5, 7, 43, -32, -323, 5, 6, 7, 767, 23, 7];
const findMin = (...numbers) => {
let min = Infinity, len = 0;
while(len++ < numbers.length){
min = numbers[len] < min ? numbers[len] : min;
}
return min;
};
console.log(findMin(...numbers));코드 설명
위 코드가 동작하는 방식을 단계별로 살펴보겠습니다.
1. 초기화: min 변수를 Infinity로 설정합니다. 어떤 숫자든 무한대보다는 작기 때문에, 첫 번째 비교부터 올바르게 동작합니다.
2. 반복 비교: while 문이 배열을 순회하면서 각 요소를 현재 min과 비교합니다. 삼항 연산자(? :)를 사용해 더 작은 값으로 min을 갱신합니다.
3. 결과 반환: 모든 요소를 확인한 후 최종적으로 가장 작은 값을 반환합니다.
출력 결과
콘솔에 출력되는 결과는 다음과 같습니다.
-323
배열에서 가장 작은 값인 -323이 정상적으로 반환된 것을 확인할 수 있습니다. 이 방법은 라이브러리 함수에 의존하지 않으면서도 시간 복잡도 O(n)으로 효율적으로 최솟값을 찾을 수 있습니다.