JS | 최소값, 최대값을 가진 랜덤함수 만들기

DongHee Kim·2021년 8월 8일
0

Javascript

목록 보기
6/9
post-thumbnail

코드 자체는 복잡하지 않지만 풀이 과정 중 랜덤함수의 최소값, 최대값을 반영할 때
잠시 비활성화 되었던.. 수학적 사고방식을 요구했던 문제였다.


문제풀이의 목적

  • Math.random() 개념을 활용할 수 있다.
  • 최소값, 최대값 사이 범위를 구하는 수학적 사고방식을 할 수 있다.

문제

최소(min), 최대값(max)을 받아 그 사이의 랜덤수를 return 하는 함수를 구현하라

풀이 과정

관련 개념

Math.random()

0.0000000000000000부터 0.9999999999999999 사이의 값 중 랜덤수를 제공한다.

사고의 흐름

문제를 보면 작은 단위로 쪼개 하나 하나 푸는 습관을 가져야 한다.

step 1

최소, 최대값을 받아오는 getRandomNumber 함수 만들기

function getRandomNumber (min, max) {}

step 2

랜덤한 수를 return 하도록 하기

function getRandomNumber (min, max) {
  //아직 범위는 정하기 전으로, 랜덤한 수만 반환되도록 함
  var randomNumber = Math.random();
  return randomNumber;
}

step 3

랜덤한 수의 범위 정하기

function getRandomNumber (min, max) {
 var randomNumber = (Math.random()*(max-min))+min;
return randomNumber;
}

최소값과 최대값을 랜덤함수에 반영시키는 (Math.random()*(max-min))+min 부분이 처음에 이해가 가질 않았다. 이해가 되기까지의 과정을 다시 차근차근 생각해보자.

Math.random()으로 얻게되는 값을 a라 하고, 최소값 10, 최대값 100이라고 생각해보자.

이 때 a의 값은 위 사진과 같이 0보단 크고, 1보다 작은 범위에 있다.

여기에 최대값인 100을 곱하면 a의 값은 어떻게 될까?


바로 0부터 100까지의 범위로 변경된다.
하지만 우리가 필요한 범위는 0이 아닌 10부터 100까지의 값


따라서 위와 같이 전체범위인 [0~최대값]에서 붉은 색 부분 [0~최소값]을 빼야한다.
우리가 얻고자 하는 범위는 푸른색 부분!
여기까지의 과정을 식으로 정리하면 Math.random()*(max-min)



위 과정까지를 처리하면 문제가 하나 생기는데, 바로 최소값 자체인 10도 함께 빼지게 되는 것이다.
a의 값은 최소값부터 시작해야하는데 시작점인 최소값이 존재하지 않게 되어 버린다.
따라서 최소값을 한 번 더해주어야 식이 완성된다.
그렇게 나오게 된 식이 바로 (Math.random()*(max-min))+min

정답 코드

function getRandomNumber (min, max) {
 var randomNumber = (Math.random()*(max-min))+min;
return randomNumber;
}

느낀점

최소값과 최대값 사이의 범위를 구하는 식을 처음 딱 봤을 땐 이해가 안갔지만, 그냥 넘기기보다 하나하나 뜯어보니 이해할 수 있었다. 처음 봤을 때 괜히 피하고 싶은 식이여도 천천히 뜯어보면 이해할 수 있다! 쓱 보고 지나치지 말자

profile
일상의 성실이 자존감을 만드는 성취주의자

0개의 댓글