JavaScript 프로그래밍을 하다 보면 특정 숫자의 배수에 해당하는 난수가 필요한 경우가 있습니다. 예를 들어 격자(grid) 기반 UI를 만들거나, 일정 간격으로 값을 배치해야 하는 상황에서 유용하게 사용할 수 있습니다.
이번 글에서는 숫자 하나를 인수로 받아, 항상 그 숫자로 나누어 떨어지는 난수를 반환하는 JavaScript 함수를 작성해 보겠습니다.
구현 원리
핵심 아이디어는 간단합니다. 먼저 일반적인 난수를 생성한 뒤, 이를 원하는 숫자(n)로 나누고 반올림한 후 다시 n을 곱해주면 됩니다. 이렇게 하면 결과값이 항상 n의 배수가 됩니다.
코드 구현
실제 코드는 다음과 같습니다.
const num = 21;
// n의 배수인 난수를 생성하는 함수 (기본 상한값: 1,000,000)
const specialRandom = (num = 1, limit = 1000000) => {
// 난수 생성
const random = Math.random() * limit;
// num으로 나누어 떨어지도록 반올림 처리
const res = Math.round(random / num) * num;
return res;
};
console.log(specialRandom(num));동작 방식 살펴보기
위 코드의 동작 과정을 단계별로 살펴보겠습니다.
1단계: 난수 생성
Math.random()은 0 이상 1 미만의 실수를 반환합니다. 여기에 limit(기본값 1,000,000)를 곱하면 0부터 상한값 사이의 실수 난수를 얻을 수 있습니다.
2단계: 배수 단위로 조정
생성된 난수를 num으로 나눈 후 Math.round()로 반올림하면, 몇 번째 배수에 해당하는지를 나타내는 정수가 됩니다. 여기에 다시 num을 곱하면 최종 결과가 항상 num의 배수가 됩니다.
실행 결과
콘솔에 출력되는 결과는 다음과 같습니다.
6006
출력 결과인 6006은 21로 나누어 떨어짐을 확인할 수 있습니다 (21 × 286 = 6006). 물론 Math.random()을 사용하기 때문에 실행할 때마다 결과값은 달라지지만, 어떤 값이 나오든 항상 입력한 숫자의 배수라는 점은 보장됩니다.
마무리
이 방법은 코드가 짧고 직관적이며, 추가 라이브러리 없이 순수 JavaScript만으로 구현할 수 있다는 장점이 있습니다. 필요에 따라 limit 매개변수를 조절하여 원하는 범위 내의 배수 난수를 손쉽게 생성할 수 있습니다.