본문 바로가기
D.evelop [CS]/Algorithm

[Algorithm 002] JS - 최소값, 최대값 구하기 Math.random()

by Danne 2021. 9. 9.

메서드 집고 넘어가기

Math.random();

0(포함)과 1(제외)사이의 난수 반환

0.0000000000000000와 0.9999999999999999사이

 

 

 

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

function getRandomNumber (min, max) {

	return Math.random() * (max - min) + min;

}

 

 

 

예) 최대값 = 10, 최소값 = 2

 

1. 최대값(max) 조건 충족시키기

이걸 0 < x < 10으로 만드려면

Math.random() * 10

 

 

2. 최소값(min) 조건 충족시키기

이걸 2 < x < n으로 만드려면

Math.random() + 2

 

이 경우 Math.random()가 나타낼 수 있느 최소값인 0.0000000000000000가 나와도 2.0000000000000000가 됨

 

 

3. 조건을 합치기

(Math.random() * 10) + 2

그런데!

Math.random() * 102를 더하는 식으로 하면 1번에서 구한 max 값이 붕괴됨!!

 

예를 들어

Math.random() * 10의 랜덤값으로 9.999999999999999가 나왔을 때, 2를 더하면 11.999999999999999가 된다.

 

그래서 2를 더.해.도 10이하 값을 구하려면, Math.random() * 10에서 미리 2를 빼주면 됨.

 

(Math.random() * 10 - 2) + 2

예를 들어보자.

 

최대값 )

Math.random() * 10의 최대값 9.999999999999999 - 2 = 7.999999999999999

7.999999999999999 + 2 = 9.999999999999999 

 

최소값 )

Math.random() * 10의 최소값  0.0000000000000000 - 2 = -2

-2 + 2 = 0

다시 최소값 조건 붕괴....

 

남들은 쉽게 푸는데 난 왜 해설을 봐도 이해 못해..

 

그럼 처음부터에  10에서 2를 미리 빼놓으면?

Math.random() * (10 - 2) + 2

최대값 )

Math.random() * 8의 최대값 7.999999999999999  

7.999999999999999 + 2 = 9.999999999999999 

 

최소값 )

Math.random() * 8의 최소값 0.0000000000000000

0.0000000000000000 +2 = 2.0000000000000000

 

 

 

 

 

 

반응형

댓글