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

JavaScript로 지정된 범위 내에서 난수 n개 생성하기

이번 글에서는 숫자 n과 두 개의 숫자로 이루어진 배열(범위)을 인자로 받아, 해당 범위 안에 속하는 난수 n개를 배열 형태로 반환하는 JavaScript 함수를 작성해 보겠습니다.

문제 개요

예를 들어 n이 10이고 범위가 [5, 15]라면, 함수는 5 이상 15 이하의 값을 가지는 난수 10개를 담은 배열을 반환해야 합니다.

핵심 아이디어는 다음과 같습니다.

  • Math.random()은 0 이상 1 미만의 난수를 반환합니다.
  • 이 값에 (최댓값 - 최솟값)을 곱하고 최솟값을 더하면 원하는 범위의 난수를 얻을 수 있습니다.
  • toFixed(2)를 사용해 소수점 둘째 자리까지 반올림하여 가독성을 높입니다.
  • 이미 생성된 값과 중복되지 않도록 includes()로 검사한 뒤 배열에 추가합니다.

예제 코드

const num = 10;
const range = [5, 15];

const randomBetween = (a, b) => {
    return ((Math.random() * (b - a)) + a).toFixed(2);
};

const randomBetweenRange = (num, range) => {
    const res = [];
    for(let i = 0; i < num; ){
        const random = randomBetween(range[0], range[1]);
        if(!res.includes(random)){
            res.push(random);
            i++;
        }
    }
    return res;
};

console.log(randomBetweenRange(num, range));

출력 결과

위 코드를 실행하면 콘솔에 다음과 같은 출력이 나타납니다.

[
    '13.25', '10.31',
    '11.83', '5.25',
    '6.28',  '9.99',
    '6.09',  '7.58',
    '12.64', '8.92'
]

난수이기 때문에 실행할 때마다 결과는 달라집니다. 다시 한 번 실행하면 다음과 같은 다른 출력을 확인할 수 있습니다.

[
    '5.29', '7.95',
    '11.61', '7.83',
    '10.56',  '7.48',
    '12.96',  '6.92',
    '8.98', '9.43'
]

참고 사항

toFixed()는 문자열을 반환하므로, 숫자 타입이 필요한 경우 Number() 또는 단항 연산자 +를 사용해 변환하면 됩니다. 또한 범위가 좁고 요청한 개수가 많으면 중복 제거 과정에서 반복 횟수가 늘어날 수 있으므로, 범위 크기와 n 값의 관계를 고려하는 것이 좋습니다.