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
: