본문 바로가기
자바스크립트

확률을 지정해 줄 수 있는 랜덤 함수

by 개발의 묘미(GaeMyo) 2022. 5. 20.
SMALL

챗봇을 만들다 보면 랜덤확률에 대한 기능을 구현해야 할 때가 자주 생기는 것 같아.

아래 함수는 자바스크립트 기준으로 작성했어.

 

function r_d(a) {
    var b = Math.floor(Math.random() * a);
    return b + 1;
};

 

코드가 길어지면 오류나거나 검토할 때를 비롯한 많은 경우에 불편한 것 같아서 최대한으로 줄였어.

 

가져갈 사람이 있을진 몰라도 가져갈때 가져가더라도 구조이해는 하고 가져가야 자기껄로 쓸 수 있어ㅎㅎ.

대충그냥 랜덤기능이기 때문에 r_d로 함수이름 선언해줬고 파라미터 a 는 아무거나 넣었어.

 

Math.random()으로 0부터 1 사이의 랜덤한 수를 생성하고

생성된 난수에 파라미터로 넣을 숫자값을 곱해줘.

 

그런다음 바로 Math.floor함수로 소수부분을 제거해줘.

 

파라미터로 5를 넣으면 0, 1, 2, 3, 4 중에 하나가 랜덤으로 출력되는 것 같아.

그렇기에 리턴값으로 b에 1을 더해줘서 출력해줘.

 

이렇게하면 5를 넣었을 시 반환되는 값은 1, 2, 3, 4, 5 중 하나로 랜덤하게 출력!!

 

만약 조건으로 20%의 확률로만 실행되게 하고싶다면?

/*function r_d(a) {
    var b = Math.floor(Math.random() * a);
    return b + 1;
};*/

//위에 저 함수를 만들었거나 다른데서 저 함수를 가져왔다고 가정

var c = 5; /*c라는 변수에 5가 담겨있다고 가정*/

if(r_d(c)==1){ /*1,2,3,4,5 중 하나를 랜덤으로 출력 후 1이 나왔다면 참*/
	return (수행할 행동)
}

 

이제 이걸 응용해서 사용해보자!

 

 

프밍 한달차라 확실하진 않지만 대부분의 프로그래밍 언어들은 배열이라는게 있는 것 같아.

그걸 응용하다보니 배열 안에 객체?나 변수? 또는 값들을 여러개 넣고 랜덤으로 출력하는 기능이 필요할 때도 있었어.

 

아래 코드는 위에서 사용한 20%의 확률로 원하는 배열의 랜덤값을 출력하는 사용 예시야.

var c = 5;
var a = ['a','b','c','d','e'];
if(r_d(c)){
	aa = a[r_d(a.length)-1]   /* a배열의 길이만큼을 r_d()함수의 파라미터값으로 넣어준다*/
    return aa;    /*aa라는 변수에 a의 배열 중 랜덤한 값을 지정해 넣어줌*/
}

(r_d(a.length)에서 1을 빼준 이유는 배열은 0이 1이기에 결과값에 1을 빼 줘야함ㅎㅎ)

더 응용해볼 수도 있고 해 본 적도 있지만

기록용이기도 하고 다른사람의 창의력을 방해할 수도 있으니 이렇게까지만 기록해 둬야겠어.

반응형
SMALL