하루살이 개발일지

[JavaScript] 중복을 제외하여 0부터 9까지 랜덤한 숫자 생성하기 (Math.random, Math.floor) 본문

웹개발/JavaScript

[JavaScript] 중복을 제외하여 0부터 9까지 랜덤한 숫자 생성하기 (Math.random, Math.floor)

harusari 2023. 6. 13. 21:58

📌 Math.random()

0(포함) 부터 1(미포함) 까지 랜덤한 부동소수점 숫자를 반환하는 함수

 

 

📌 0부터 9까지 숫자를 생성하고 싶다면?

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

Math.random() * 10을 통해 0(포함) 부터 10(미포함) 까지의 부동소수점 숫자가 생성됨

이를 Math.floor를 통해 내림 -> 주어진 숫자보다 크지 않은 정수를 반환

따라서 반환값은 0부터 9 사이의 정수가 됨

 

 

📌 1부터 9까지의 숫자를 생성하고 싶다면?

Math.floor((Math.random() * 9)) + 1

Math.random() * 9 를 통해 0(포함) 부터 9(미포함) 까지의 부동소수점 숫자를 생성한 뒤, Math.floor() 함수를 통해 정수로 변환.

이는 0부터 8까지의 정수를 반환하게 됨

마지막에 1을 더해주게 되면, 1부터 9까지의 숫자를 얻게 됨

 

 

📌  Math.floor() 를 비트연산자 ~ 로 수정하기

~~(Math.random() * 10);

비트연산자 ~를 사용하여 Math.floor()를 대신할 수도 있다.

 

 

📌 랜덤한 n자리의 숫자를 생성하고 싶다면? (0부터 9까지, 중복 미허용)

const pickRandomNum = (numLength) => {
  let randomNums = [];
  for (let i = 0; i < numLength; i++) {
    let rn = ~~(Math.random() * 10);
    if (randomNums.indexOf(rn) < 0) {
      randomNums.push(rn);
    } else i--;
  }
  return randomNums.join("");
};

pickRandomNum(3); //ex. 295;

numLength을 매개변수로 받아 랜덤한 n자리 숫자를 return하는 함수이다.

randomNum이 들어갈 곳을 배열로 만들어 놓고, numLength만큼 반복문을 돌아가도록 한 후 중복되는 숫자를 피하기 위해 indexOf(rn) < 0을 사용하였다.

join() 메서드를 통해 배열의 숫자를 String으로 합쳐주는 작업을 진행하였다.

반복 숫자를 허용하고 싶다면 if 조건문 부분을 삭제하면 된다.

 

 

 

📌  랜덤한 n자리 숫자를 생성하고 싶다면? (1부터 9까지, 중복 허용)

const pickRandomNum2 = (numLength) => {
  let randomNums = [];

  while (randomNums.length < numLength) {
    let rn = ~~(Math.random() * 9) + 1;
    randomNums.push(rn);
  }
  return randomNums.join("");
};

pickRandomNum2(3); //ex. 266

또 for문을 사용하면 재미 없으니까, while문으로 고쳐보았다.

이번에는 if부분을 삭제하여 중복을 허용하였고, 1부터 9까지의 숫자가 나오도록 만들었다.