최소값(min), 최대값(max)을 범위로 한 랜덤숫자 구하기

Lemon·2022년 4월 28일
1

JavaScript

목록 보기
11/17
post-custom-banner

📝과제

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

  • 함수는 짧지만, 이번에는 수학의 뇌를 조금 써야 하는 assignment 입니다. 🙌
  • 앞으로 랜덤함수를 쓸 일이 정말 많습니다.
  • 그런데 Math.random() 으로는 내가 원하는 범위의 랜덤수를 얻을 수가 없습니다.
  • 항상 0.0000000000000000에서 0.9999999999999999 사이 값만 return 해주기 때문이죠.

초기 작성 코드

function getRandomNumber (min, max) {
  return Math.floor(Math.random()*(max-min) + min)
}

처음에 최소값을 어떻게 정할 수 있지 생각했다..

Math.floor( Math.random() * 10 ) : 0~10
Math.floor( Math.random() * 100 ) : 0~100

Math.random()은 항상 0부터 시작하는 랜덤숫자이기 때문에 그냥 뒤에 최소값을 더하면 되는거였다.

그렇다면

Math.floor( Math.random() * 100 + 10)

0(+10)~100(+10) 사이의 값이 나왔다. 10에서 110 까지의 범위가 나오니까 최대값범위에서 최소값만큼 빼서 10~100으로 맞췄다.

따라서

Math.floor(Math.random() * (max-min) + min)

로 작성하고 테스트를 눌렀는데 실패가 나왔다

빨간 글씨 너무 무섭다🥲


구글링 시작

참고 👉🏻 https://hianna.tistory.com/454

1 <= random <= 10
(Math.random() * 10) + 1
최소값을 지정하고 싶을 때는 Math.random() (max - min + 1) 값을 계산하고, 소수점 이하를 버림합니다. 그리고, min 값을 더해줍니다.
1~10 범위의 정수 난수를 계산하기 위해서 아래와 같이 계산하였습니다.
Math.floor(Math.random()
(10 -1 + 1)) + 1
= Math.floor(Math.random() * 10) + 1

라고 적혀있었는데 max-min을 곱하고 왜 +1 을 하는지 이해할 수 없었다.


피드백 후 코드

오늘도 완영님께 여쭤봤다. (god...)

Math.random()x10을 하면 0~9의 랜덤한 숫자가 나온다.
근데 우리가 원하는 건 0~10사이의 숫자10을 포함시켜서 나와야 하기 때문에 +1을 해줘야한다!

function getRandomNumber (min, max) {
  return Math.floor(Math.random()*(max-min+1) + min)
}

// 아래 코드는 절대 수정하지 마세요.
module.exports = {getRandomNumber};

완료!! ✨ (초록색이 좋아질 것 같다🤩)

profile
개미는 뚠뚠..오늘도 뚠뚠🐜
post-custom-banner

2개의 댓글

comment-user-thumbnail
2022년 4월 29일

주영님 화이팅~! 🔥

1개의 답글