이번 글에서는 두 개의 숫자로 이루어진 배열을 첫 번째 인수로 받는 JavaScript 함수를 작성해 보겠습니다. 이 배열은 난수를 생성할 수 있는 숫자 범위를 지정합니다.
두 번째 인수는 단일 숫자로, 생성해야 할 난수의 개수를 나타냅니다.
마지막으로 함수는 생성된 모든 난수 중 가장 큰 값을 반환해야 합니다.
문제 접근 방식
구현 과정은 다음과 같이 정리할 수 있습니다.
1단계: 범위 내 난수 생성 함수 만들기
먼저 최솟값(min)과 최댓값(max)을 받아 해당 범위 사이의 임의의 실수를 반환하는 헬퍼 함수를 작성합니다. Math.random()은 0 이상 1 미만의 값을 반환하므로, 여기에 (max - min)을 곱한 뒤 min을 더하면 원하는 범위의 난수를 얻을 수 있습니다.
2단계: 지정된 개수만큼 난수 반복 생성
반복문을 사용하여 두 번째 인수로 전달받은 개수만큼 난수를 생성하고, 각각의 값을 배열에 저장합니다.
3단계: 최댓값 추출
마지막으로 Math.max()와 스프레드 연산자(...)를 활용해 배열에 담긴 모든 난수 중 가장 큰 값을 손쉽게 찾아낼 수 있습니다.
예제 코드
실제 구현 코드는 다음과 같습니다.
const range = [15, 26];
const count = 10;
// 지정된 범위 내에서 하나의 난수를 생성하는 함수
const randomBetweenRange = ([min, max]) => {
const random = Math.random() * (max - min) + min;
return random;
};
// count개의 난수를 생성한 뒤 그중 최댓값을 반환하는 함수
const pickGreatestRandom = (range, count) => {
const res = [];
for(let i = 0; i < count; i++){
const random = randomBetweenRange(range);
res.push(random);
};
return Math.max(...res);
};
console.log(pickGreatestRandom(range, count));실행 결과
콘솔에 출력되는 결과는 다음과 같습니다. 실행할 때마다 값은 달라지지만, 항상 지정된 범위(15 ~ 26) 안에서 가장 큰 난수가 출력됩니다.
25.686387806628826
핵심 포인트 정리
난수 범위 공식: Math.random() * (max - min) + min 패턴을 사용하면 min 이상 max 미만의 임의의 실수를 생성할 수 있습니다.
스프레드 연산자 활용: Math.max(...배열)처럼 스프레드 연산자를 사용하면 배열의 요소들을 개별 인수로 펼쳐서 전달할 수 있어, 별도의 정렬 없이도 최댓값을 한 줄로 구할 수 있습니다.
이 방법은 시뮬레이션, 게임 개발, 통계 샘플링 등 여러 개의 무작위 값 중 극값을 찾아야 하는 상황에서 유용하게 활용될 수 있습니다.