replit 22. 최소값, 최대값 사이의 랜덤수 리턴
Assignment
최소값(min), 최대값(max)을 받아 그 사이의 랜덤수를 return하는 함수를 구현하시오.
My code
function getRandomNumber(min, max) {
retrun (Math.random()*(max-min))+min;
}
매우 짧은 코드이지만 풀지 못했던 문제로 정리해보려 한다.
난수생성
Math.random(); // 0 ~ 0.999999
우선 Math.random()은 0이상 1미만의 부동소숫점 의사 난수를 반환한다. 1을 포함하지 않는다는 점이 중요하다.
최대값 설정
// 0이상 최대값 미만의 난수 생성
Math.random() * 최대값 // 0 <= x < 최대값
Math.random()은 0이상 1미만의 난수를 반환한다고 했다. 양변에 최대값을 곱하면 (0*최대값 <= x < 1*최대값)으로 0이상 최대값 미만의 값을 생성할 수 있다. 예를들어 Math.random() * 10을 하면 0 <= x < 10 사이의 난수를 얻을 수 있다.
최소값 설정
// 최소값 이상 최대값+1 미만의 난수 생성
(Math.random() * 최대값) + 최소값 // 최소값 <= x < 최대값+최소값
Math.random()은 0이상의 난수를 생성하므로 곱셈을 하여도 최소값은 변하지 않는다. 이때 최소값으로 설정할 값을 양변에 더하면 된다(0+최소값 <= x < 1*최대값+최소값). 예를 들어 (Math.random() * 10) + 1을 하면 1 <= x < 11 사이의 난수를 얻을 수 있다.
여기서 문제가 발생하는데 최소값 이상 최대값 미만의 난수를 얻고 싶은데, 최대값으로 설정한 값이 최소값 만큼 증가한다는 점이다.
최소값 설정으로 인한 문제 해결
(Math.random() * (최대값-최소값)) + 최소값 // 최소값 <= x < 최대값
최대값으로 설정한 값이 최소값만큼 커졌으니 난수에 최대값으로 곱할 값에서 최소값만큼 빼면 원하는 결과를 얻을 수 있다. 이제 정리된 예시를 통해서 이해해 보도록 하자.
예시 ) 1이상 10미만의 난수를 생성하고 싶다면?
(Math.random() * (10-1)) + 1
우선 괄호 안의 식부터 풀이하면 Math.random() * 9로 0 <= x < 9 사이의 값을 가지는 난수를 얻을 수 있다.
이후, 1을 더하면 1 <= x < 10 사이의 값을 가지는 난수를 얻을 수 있다.
'⭐️ Memory > 교육수강 회고' 카테고리의 다른 글
위코드 1주차 회고 - 절대적 학습량 (0) | 2022.05.02 |
---|---|
replit 30. getExamResult 함수 구현 (0) | 2022.05.02 |
replit 19. sliceCityFromAddress 함수 구현 (0) | 2022.05.01 |
replit 17. divideArrayInHalf 함수 구현 (0) | 2022.05.01 |
Wecolor Picker 컴포넌트 만들기 (0) | 2022.04.30 |
댓글
이 글 공유하기
다른 글
-
위코드 1주차 회고 - 절대적 학습량
위코드 1주차 회고 - 절대적 학습량
2022.05.02 -
replit 30. getExamResult 함수 구현
replit 30. getExamResult 함수 구현
2022.05.02 -
replit 19. sliceCityFromAddress 함수 구현
replit 19. sliceCityFromAddress 함수 구현
2022.05.01 -
replit 17. divideArrayInHalf 함수 구현
replit 17. divideArrayInHalf 함수 구현
2022.05.01