프로그램 설계시 확률에 따른 결과를 추출해 내는 방식에는 여러 방법이 있다. 확률에 따른 결과를 추출하기 위해선 어떤 것에 의에 확률을 구하냐 이거인데 이번시간에는 간단한 예제 몇가지를 통해 알아보도록 하자.
예를 들어 게임에서 아이템 강화 확률이 50% 인 프로그램을 짠다면 아래와 같다.
<?php
/* 아이템 강화시 확률에 따른 처리 */
$item = 50; // 강화확률
$getItem = mt_rand(1,100);
$result = $getItem <= $item ? '강화성공':'강화실패';
echo $result;
위의 결과를 추출해보면 강화성공 또는 강화실패이다.
예를 들어 가위, 바위, 보 게임에서 각각의 비율에 따라 결과를 추출하는 프로그램을 만들어야 한다면 아래와 같이 할 수 있다.
<?php
/* 가위, 바위, 보 게임 */
$item = array(
'가위'=>33,
'바위'=>33,
'보'=>33,
);
$setItem = array();
foreach($item as $k=>$v){
$setItem = array_merge($setItem,array_fill(0,$v,$k));
}
shuffle($setItem);
$getItem = $setItem[array_rand($setItem)];
echo $getItem;
위의 결과를 추출해보면 가위, 바위, 보 중 하나일것이다.
로또와 같이 숫자 확률에 따라 6개를 추출해 내는 방법도 있는데 이는 2번과 유사하며 비교적 쉽게 구현할 수 있다.
<?php
/* 확률에 따른 로또 숫자 추출 */
// 로또에 랜덤하게 확률을 넣어준다.
$item = array();
for($i=1;$i<=45;$i++){
$item[$i] = mt_rand(1,100);
}
// 확률에 따른 배열을 추가
$setItem = array();
foreach($item as $k=>$v){
$setItem = array_merge($setItem,array_fill(0,$v,$k));
}
shuffle($setItem);
// 6개의 숫자를 확률에 따라 추출한다.
$getItem = array();
for($i=1; $i<=6;$i++){
$get = $setItem[array_rand($setItem)];
if( in_array($get,$getItem) ){ $i--; continue; }
$getItem[$i] = $get;
}
sort($getItem);
echo implode(" , ",$getItem);
위의 결과는 6개의 숫자를 얻을 수 있다.
로또 결과는 예를 들기 위한거고 실제로는 통계에 의해 당첨번호를 추출해 낼 수는 없다.
현재 lotto.redinfo.co.kr 이라는 자동추첨 서비스를 운영중이며 몇년간 프로그램을 이용하여 여러 방식으로 통계를 내고 추출해 보았지만 로또 자체가 운이기 때문에 통계에 따라 결과가 추출되지 않는다. 따라서 로또 자체는 통계에 따른 결과를 추출해 낼 수는 없다. 물론 번호를 최대한 조합하여 랜덤하게 추출할때 나오지 않을 숫자를 몇개 제외 한다면 당첨확률은 높아지겠지만 이것도 순 운이기때문에 제외한 번호에서 당첨 번호가 나올 확률도 상당히 크며 이럴경우 미 당첨될 확률만 높아질 수 있다.
오늘은 이렇게 확률에 따른 결과를 추출해 내는 방식에 대해 알아보았고, 이를 활용한다면 여러 방면에서 재밌는 서비스를 제공할 수 있다.