메서드 집고 넘어가기
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() * 10에 2를 더하는 식으로 하면 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
'D.evelop [CS] > Algorithm' 카테고리의 다른 글
[Algorithm 006] JS - reverse (0) | 2021.09.14 |
---|---|
[Algorithm 005] JS - twoSum (0) | 2021.09.14 |
[Algorithm 004] JS - 주어진 문자열에서 문자의 인덱스 찾기 (0) | 2021.09.11 |
[Algorithm 003] JS - 가장 긴 단어 찾기 (0) | 2021.09.11 |
[Algorithm 001] JS - 사칙연산 (0) | 2021.09.07 |
댓글