확률 수정 여쭤봐요

확률 수정 여쭤봐요

QA

확률 수정 여쭤봐요

본문

복권게임에서 아래와 같은 확률 소스가 있는데요.

 

// 복권 당첨금 난이도 - 수정
$bok1 = "1000";
$bok2 = "700";
$bok3 = "400";
$bok4 = "300";
$bok5 = "200";
$bok6 = "100";
$bok7 = "20";
$bok8 = "꽝";

$data = array(
    $bok5, $bok8, $bok6, $bok7, $bok8, $bok7, $bok8, $bok6,
    $bok5, $bok1, $bok8, $bok7, $bok8, $bok7, $bok5, $bok8,
    $bok7, $bok8, $bok6, $bok7, $bok3, $bok7, $bok6, $bok8,
    $bok7, $bok7, $bok8, $bok4, $bok7, $bok8, $bok3, $bok2,
    $bok7, $bok7, $bok8, $bok6, $bok4, $bok7, $bok6, $bok8    
);

$random = rand(0, 39);
$po_point = $data[$random];

 

우선 $random = rand(0, 39); 이 부분이 무엇을 의미하는 지 알고싶고.

 

두 번째는 

 

    $bok5, $bok8, $bok6, $bok7, $bok8, $bok7, $bok8, $bok6,
    $bok5, $bok1, $bok8, $bok7, $bok8, $bok7, $bok5, $bok8,
    $bok7, $bok8, $bok6, $bok7, $bok3, $bok7, $bok6, $bok8,
    $bok7, $bok7, $bok8, $bok4, $bok7, $bok8, $bok3, $bok2,
    $bok7, $bok7, $bok8, $bok6, $bok4, $bok7, $bok6, $bok8    

 

이 부분을 두배로 늘려서 7등과 6등을 더 넣고, 1등(bok1)을 빼도 되는지, 

그러니까 두배로 늘려서 bok1을 하나만 넣으면 확률을 더 극악화 할 수 있는지 

여쭤보고 싶습니다. 

 

이 질문에 댓글 쓰기 :

답변 4

첫번째로 $random = rand(0, 39); 는 0부터 39까지의 범위에서 무작위로 하나의 숫자를 선택하는 코드이며. 이렇게 선택된 숫자는 배열 $DATA의 인덱스로 사용되어 해당 인덱스의 값을 가져오게 됩니다.

 

두 번째로, $DATA 배열에는 복권 당첨금 난이도에 해당하는 값들이 포함되어 있습니다. 각각의 값은 $bok1, $bok2, $bok3, ..., $bok8 변수에 할당된 값으로 대응됩니다. 예를 들어, $data[0]$bok5의 값이고, $data[1]$bok8의 값입니다.

 

만약 $data 배열을 두 배로 늘리고, 7등과 6등을 추가하고 1등을 제거한다면, 확률은 극악화될 수 있습니다. 현재 $data 배열은 40개의 요소로 이루어져 있으며, 1등인 $bok1이 한 번만 나타나며. 만약 두 배로 늘린다면, 배열의 크기는 80이 되고 1등인 $bok1은 두 번 포함됩니다. 이 경우 1등에 당첨될 확률은 더 낮아지게 됩니다.

 

또한, 7등과 6등을 추가한다면, 더 많은 꽝($bok8)과 상대적으로 낮은 당첨금을 가진 등수가 포함되므로, 전체적인 당첨 확률은 더욱 낮아질 것입니다.

따라서 $data 배열을 두 배로 늘리고 1등을 제거하면 확률이 더 극악화될 수 있을 것으로 생각합니다

답변 감사합니다! 2배로 늘렸을 경우 $random = rand(0, 39); 이 부분은 수정이 필요 없을까요? 80개 중 40개를 랜덤으로 가져오니 수정하나, 안 하나 같은 결과인걸까요?

네, 맞습니다. $random = rand(0, 39); 부분은 $data 배열이 80개 요소로 늘어난 경우에도 수정할 필요가 없습니다. 이는 80개의 요소 중에서 0부터 39까지의 범위에서 무작위로 숫자를 선택하기 때문이며,

rand(0, 39) 함수는 0부터 39까지의 정수 중에서 무작위로 숫자를 선택합니다. 배열의 크기가 80개로 늘어나도 범위는 여전히 0부터 39까지이기 때문에 수정할 필요가 없습니다.

따라서, 배열을 2배로 늘리고 1등을 제거했을 때 $random = rand(0, 39); 부분은 그대로 유지하시면 될것 같습니다.

 $random = rand(0, 39);은 0~39에서 랜덤으로 숫자를 하나 가지고 오게됩니다.

위에 랜덤에서 나온 숫자로 $data라서 가지고 오는 거래서 두번째 질문 하신 확률은 직접 계산을 해보셔야 할거 같습니다.

위 내용만이 아닌 다른 부분도 있을거로 생각됩니다만,

배열의 갯수를 늘려 확률을 낮추더라도 운영자의 의도와 관계 없이 1등이 계속 나온다거나 하는 등의 내용은 발생할 수 밖에 없습니다.

따라서 일자별로 구분을 하든, 회차별로 구분을 하든 

복권 DB를 구성하여, 해당 복권에 등수별 출현 가능 횟수, 출현 횟수를 보관하여

운영자의 의도를 어느 정도 개입시키는 게 좋아보입니다.

bok을 추가해서 80개 100개로 늘리고

$random = rand(0, 39); $po_point = $data[$random];

이 부분을 그대로 사용한다면 늘리는 것은 아무 의미도 없습니다

 

그렇게 할 필요 없이 추가는 마음대로 하고 다음처럼 하면 되겠습니다

배열 요소를 섞어서 맨 앞의 요소 또는 아무 것이나 하나 가져오면 됩니다

shuffle($data); shuffle($data); 

$po_point = $data[0]; 또는 $po_point = $data[5]; 등

답변을 작성하시기 전에 로그인 해주세요.
전체 222
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT