최소(min), 최대값(max)을 받아 그 사이의 랜덤수를 return 하는 함수를 구현해주세요.
- 함수는 짧지만, 이번에는 수학의 뇌를 조금 써야 하는 assignment 입니다. 🙌
- 앞으로 랜덤함수를 쓸 일이 정말 많습니다.
- 그런데 Math.random() 으로는 내가 원하는 범위의 랜덤수를 얻을 수가 없습니다.
- 항상 0.0000000000000000에서 0.9999999999999999 사이 값만 return 해주기 때문이죠.
function getRandomNumber (min, max) {
let random = Math.random()*(max - min) + min;
return random;
}
사실 함수 자체는 정말 간단하고 쉬운 함수였는데, 내 수학적 머리가 딸려서 결국 대-황-구글의 힘을 빌릴 수 밖에 없는 문제였다. 그렇기에 문제를 못풀었을 때의 자괴감은 더욱 컸다..
만일 Math.random()
의 값을 0 < x < 10 으로 만들고 싶으면
Math.random() * 10
Math.random()
은 항상 0.0000000000000000에서 0.9999999999999999 사이 값만 return 해주기 때문에 최댓값을 얻고싶으면 return 값에 그 최댓값을 곱해버리면 죽었다 깨어나도 그 값을 넘지 못한다.
만일 Math.random()
의 값을 무조건 3보다 크게 하고 싶으면
Math.random() + 3
이러면 max 조건과 같이 0.0000000000000000에서 0.9999999999999999 사이 값만 return 해주기 때문에 random 값이 3.0000000000000000에서 시작하게 된다.
그럼 남은건 이 둘을 퓨전해주기만 하면 되겠다!
퓨우우우우우우우우우전!
(Math.random() * 10) + 3
오잉 랜덤함수의 상태가..?
이러면 랜덤 숫자가 0.8xxxxxxxxx가 나오게 되면 최댓값인 10을 넘어버리게 된다!
최대값과 최소값 사이의 랜덤수를 return하려면 최소값에서 더한 만큼, 최대값을 구하는 조건에서 그 수를 빼주어야만 최소값과 최대값 사이의 수를 만족시킬 수 있다.
Math.random()*(max - min) + min;
let max = 10;
let min = 2;
let ranNum = Math.random()*(max - min) + min;
console.log(ranNum); // 4.471307792271945
이러면 문제 해결!
사실 Math.random()
함수를 이해를 못해서 못푼 문제라기보다는, 수학적 접근 방식이 부족해서 해결하지 못했던 문제였다. 아무래도 개발을 하기 위해서는 수학적인 두뇌가 있으면 좋은 것은 자명한 사실인 것 같다. 수학을 게을리하지 말걸..