wecode 레플릿 과제를 풀며 정리한 내용입니다.
최소값과 최대값을 매개변수로 받아 두 숫자 사이의 랜덤 숫자를 구하는 함수를 만들면 아래와 같습니다.
function getRandomNumber (min, max) {
let radomNum = Math.floor(Math.random() * (max - min + 1)) + min;
return radomNum;
}
Math.random()
은 0 이상 1 미만 (0 ~ 0.9999...) 의 난수(랜덤한 숫자)를 반환합니다. Math.floor()
소수점 아래 부분을 내림해 정수를 만듭니다.
랜덤함수의 범위는 0<= x < 1
이므로 곱해준 수 만큼 범위가 늘어납니다.
// 랜덤 함수에 5를 곱하면
Math.random() * 5
// 난수의 범위가 아래처럼 변경
0 <= X < 1
0 * 5 <= X < 1 * 5
0 <= X < 5
최소값 50 최대값 100 사이의 랜덤값을 구하고 싶다면 50 <= X < 100
범위가 설정되어야 하지만, 0 으로 시작하는 랜덤값의 범위에 숫자를 곱해서 50을 최소값으로 정할 순 없습니다. 그러니 갯수를 기준으로 생각해야 합니다. 50과 100 사이에는 50개의 숫자가 들어가니 0 <= X < 50
의 랜덤값을 반환하고, 그 값에 최소값 50을 더해줍니다.
// 아래와 같은 순서대로 범위가 변경
0 <= X < 1
0*(100-50) <= X < 1*(100-50)
0 <= X < 50
0+50 <= X < 50+50
50 <= X < 100
위와 같은 원리로 아래 코드가 동작합니다.
Math.floor(Math.random() * (max - min + 1)) + min
여기서 (최대값 - 최소값)에 1을 더하면 최대값까지 포함하게 됩니다.
// 100 까지 포함하는 범위로 설정
0 <= X < 1
0*(100-50+1) <= X < 1*(100-50+1)
0 <= X < 51
0+50 <= X < 51+50
50 <= X < 101