C# 확률을 적용한 랜덤값 선택하기 (cumulative)
Unity3D/C# 2020. 11. 26. 00:28반응형
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Study05
{
public class App
{
public App()
{
//Random rand = new Random();
//for (int i = 0; i < 10; i++) {
// int num = rand.Next() % 5;
// Console.WriteLine(num);
//}
//0 ~ 4 까지 20% 동일한 확률로 선택한다
//하지만 0, 1을 다른 확률로 더 많이 선택 하고 싶거나
//4를 아주 작은 확률로 선택 하려면?
//누적확률값을 사용하면 된다
//값 확률 누적확률
//0 35% 30%
//1 30% 65%
//2 15% 80%
//3 15% 95%
//4 5% 30%
//rand를 사용해 누적확률값을 랜덤으로 선택 하자
//예를들어 랜덤으로 선택한 값이 72%라면
//주의 : 누적확률값을 사용하기 위해 확률이 작은것부터 정렬 해야 한다
//값 확률 누적확률
//4 5% 5%
//3 15% 20%
//2 15% 35%
//1 30% 65%
//0 35% 100%
//72%가 선택되었음으로 5%인 4는 제외
//20%내에 있는 3도 제외
//35%내에 있는 2도 제외
//65%내에 있는 1도 제외
//100%안에 있는 0이 선택 된다
Random rand = new Random();
for (int k = 0; k < 10; k++) {
int num = rand.Next(0, 101);
float[] p = { 5f, 15f, 15f, 30f, 35f };
float cumulative = 0f;
int target = -1;
for (int i = 0; i < 5; i++)
{
cumulative += p[i];
if (num <= cumulative)
{
target = 4 - i;
break;
}
}
Console.WriteLine(target);
}
}
}
}
반응형
'Unity3D > C#' 카테고리의 다른 글
.NET의 \0(U + 0000) 과 String (0) | 2020.12.02 |
---|---|
C# bitwise (0) | 2020.11.27 |
디버거에서 변수에 대한 메모리 (0) | 2020.11.24 |
한글 받침에따라서 '을/를' 구분하기 (0) | 2020.10.19 |
xml to json (0) | 2020.08.05 |