예제 문제 정리

재웅·2023년 3월 30일
0

오늘의 정리

목록 보기
3/52

Assignment

  • 최소(min), 최대값(max)을 받아 그 사이의 랜덤수를 반환하는 getRandomNumber 함수를 구현해주세요.
    min과 max를 인자로 받아 그 사이의 정수를 랜덤으로 반환하는 함수를 구현해주세요.

  • 문제를 읽고 먼저 생각한것
  1. Math.random() => 0~0.9999999 값이 나온다

  2. 랜덤값은 소수점 형태로 나오니 나중에 Math.floor()로 정수 형태 변환해야한다.

  3. 랜덤값에 최소값을 곱한것과 랜덤값에 최대값을 곱한 그 값 사이의 모든것이 정답이겠다.


하나씩 차근히 대입해보며 코드 생각해보기

  • 내가 임의로 최소 최대값을 정하고 그에대한 값을 생각하기
  1. 최소값 = 0 / 최대값 = 9 일때

    랜덤 함수(Math.random())는 0~0.9999999 값이 나온다고했다.
    이때 식에서 뽑히는 랜덤값이 0과 0.9999 라고 가정하고 두가지 경우를 대입해보자

    랜덤값이 0.9999 일때
    0.9999 * 최소값 0 = 0
    0.9999 * 최대값 9 = 8.xxx 이렇게 되면 최대값 9 포함이 안되는데?

  • 최대값에 포함이 안되는경우 수정

    최대값에 1을 더해준다

    Math.random()*(max+1)

    이러면 최대 = 9.xxx 나오게된다
    여기서 최대-최소 = 사이값이니까

    랜덤*(최대+1-최소) 하면됨

    Math.random()*(max+1-min)
  1. 최소값 = 1/ 최대값 = 10 일 때
    랜덤값이 0 이라면
    0 * 최소값 1 = 0 이렇게 되면 최소값 1 포함 안되는데?
    0 * 최대값 10 = 0얘도 똑같고?
  • 최소값에 포함이 안되는경우 수정

    0*(10+1-1) = 0 최소값 1로 설정해두었는데 랜덤값이 0 이라면 무조건 0 나오게됨
    이 문제를 해결하기위해 원래 있던식에 최소값만 더해보자
    랜덤(최대+1-최소)+최소 하게되면
    0
    (10+1-1)+1 = 1 따라서 조건에 맞게 나온다

    마지막으로 floor씌우면 끝일듯


  • 정답
function getRandomNumber(min,max) {
    	return Math.floor(Math.random() * (max + 1 - min)) + min;
    }
    console.log(getRandomNumber(2,10)); // 2~10의 값이 나온다.
profile
오늘의 정리

0개의 댓글