n개의 원소가 있고

각 원소는 [0,1]의 확률을 가짐

모든 원소의 확률합은 1.0임

각 원소는 순차적으로 직렬화됨 (예 : 0.2 , 0.2 , 0.3 , 0.1 , 0.2 )


이때 랜덤을 돌려서 [0,1] 사이의 값을 얻었을때

이걸로 어떤 원소를 pick 해야 되는지 알아낼려면 어떻게 해야될까?


수도코드로


sum = 0.0f

for( i < list.size -1 )

{

  sum += list[i];

  nextSum = sum + list[i+1];

  if(sum < randomvalue < nextSum ) return i;

}


대충 이렇게 하면 될 것 같긴한데 무식한 방법 같음

이런 문제는 흔할거라고 생각하고 분명히 좋은 방법이 있을건데

가르침을 주셈 형님들