Javascript - 최소 ~ 최대값 사이의 랜덤 숫자 뽑기

Junghyun Park·2021년 1월 14일
2

랜덤 숫자 뽑기는 매우 자주 사용되는 기능이다.

  • 랜덤한 숫자를 가져오는 기능은 프로그램 개발에서 매우 자주 사용되는 기능임
  • 따라서, javascript는 built-in 함수로 포함되어 있음(Math.random())

닥치고 암기? 👎🏻

  • 구글 서치를 하면 그냥 아래와 같은 방식을 공식처럼 알려주고 있다.
  • 생각보다 길지 않고, 어렵지 않다. 그러나....
function makeRandom(min, max){
    var RandVal = Math.floor(Math.random()*(max-min+1)) + min;
    return RandVal;
}
// 랜덤 함수(정수)
  • 하지만, 단순 암기는 휘발성이 높을 뿐더러, 결국 '"이해"가 최고의 암기'라고 믿는 나는 내 방식대로 이해해보기로 했다.

내 방식대로 이해해보기

  • 예를 들어 생각해보자,
    "90 에서 35 사이의 랜덤 숫자를 뽑는 경우"를 가정해보자
  1. 먼저 Math.random()의 반환 값은 0 ~ 0.99999..까지 중 어떤 수이다.
  1. 여기서 어떤 숫자를 곱하면 그 만큼 최대 값이 커진다.
    예시의 경우 최대값이 90이므로 90을 곱해보자.

  2. 시작값이 최소값이어야 하므로, 최대값까지의 범위에서, 최소 값까지의 범위를 빼면, 사이 범위의 값(범위)로 한정할 수 있다. (빨간색 선분 범위만 남는다. 실제 선택되는 랜덤 수는 이 영역에서의 어느 한 수이다.)
    이걸 식으로 표현하면,
    Math.random()90 - Math.random() 35가 된다.

  3. 여기서 문제가 하나 발생한다. 범위의 크기는 맞는데, 출발점이 0이다.
    따라서, 출발점을 최소값으로 바꿔줘야, 선택되는 랜덤 수는 항상 최소값 이상이 된다. 식으로 표현하면, 3번 식에서 최소값인 35를 더해줘야 한다.
    최종 정리 함수 식은
    Math.random()*(90 - 35 ) + 35 가 된다.

    이것을 일반형으로 수정하면, 앞서 언급한 위의 코드가 된다.

    Math,random()(최대값 - 최소값) + 최소값

profile
21c Carpenter

0개의 댓글