[Wecode] Repl.it - 최소, 최대값을 받아 그 사이의 랜덤수를 return 하는 함수

hangkemiii·2022년 4월 27일
0

wecode

목록 보기
9/26
post-custom-banner

문제

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

  • 함수는 짧지만, 이번에는 수학의 뇌를 조금 써야 하는 assignment 입니다. 🙌

  • 앞으로 랜덤함수를 쓸 일이 정말 많습니다.

  • 그런데 Math.random() 으로는 내가 원하는 범위의 랜덤수를 얻을 수가 없습니다.

  • 항상 0.0000000000000000에서 0.9999999999999999 사이 값만 return 해주기 때문이죠.

내 풀이

function getRandomNumber (min, max) {
  let random = Math.random()*(max - min) + min;

  return random;
}

사실 함수 자체는 정말 간단하고 쉬운 함수였는데, 내 수학적 머리가 딸려서 결국 대-황-구글의 힘을 빌릴 수 밖에 없는 문제였다. 그렇기에 문제를 못풀었을 때의 자괴감은 더욱 컸다..

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

만일 Math.random() 의 값을 0 < x < 10 으로 만들고 싶으면

Math.random() * 10

Math.random() 은 항상 0.0000000000000000에서 0.9999999999999999 사이 값만 return 해주기 때문에 최댓값을 얻고싶으면 return 값에 그 최댓값을 곱해버리면 죽었다 깨어나도 그 값을 넘지 못한다.

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

만일 Math.random() 의 값을 무조건 3보다 크게 하고 싶으면

Math.random() + 3

이러면 max 조건과 같이 0.0000000000000000에서 0.9999999999999999 사이 값만 return 해주기 때문에 random 값이 3.0000000000000000에서 시작하게 된다.

그럼 남은건 이 둘을 퓨전해주기만 하면 되겠다!

퓨우우우우우우우우우전!

(Math.random() * 10) + 3

오잉 랜덤함수의 상태가..?

이러면 랜덤 숫자가 0.8xxxxxxxxx가 나오게 되면 최댓값인 10을 넘어버리게 된다!

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

최대값과 최소값 사이의 랜덤수를 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() 함수를 이해를 못해서 못푼 문제라기보다는, 수학적 접근 방식이 부족해서 해결하지 못했던 문제였다. 아무래도 개발을 하기 위해서는 수학적인 두뇌가 있으면 좋은 것은 자명한 사실인 것 같다. 수학을 게을리하지 말걸..

profile
Front-End Developer
post-custom-banner

0개의 댓글