[java] 자바에서 확률을 고려한 랜덤 넘버 생성하기

랜덤 넘버를 생성할 때 특정 확률 분포를 원할 때, 자바는 java.util.Random 클래스를 사용하여 확률을 고려한 랜덤 넘버를 생성할 수 있습니다. 이 포스트에서는 자바에서 확률 분포를 고려한 랜덤 넘버를 생성하는 방법에 대해 살펴보겠습니다.

균일한 확률 분포를 가진 랜덤 넘버 생성

가장 간단한 형태의 랜덤 넘버 생성은 균일한 확률 분포에서 랜덤 값을 얻는 것입니다. java.util.Random 클래스를 이용하면 다음과 같이 균일한 확률 분포를 가진 랜덤 값들을 생성할 수 있습니다.

import java.util.Random;

public class RandomNumberGenerator {
    public static void main(String[] args) {
        Random random = new Random();
        int randomNumber = random.nextInt(100); // 0부터 99까지의 랜덤한 정수
        System.out.println("Random Number: " + randomNumber);
    }
}

위 예제는 0부터 99까지의 랜덤한 정수를 생성합니다.

확률 분포를 지정한 랜덤 넘버 생성

특정 확률 분포를 따르는 랜덤 넘버를 생성하려면 java.util.Random 클래스의 기능만으로는 한계가 있습니다. 이 경우, Apache Commons Math, Colt, JDistlib 같은 라이브러리를 사용하여 확률 분포를 지정한 랜덤 값을 생성할 수 있습니다.

예를 들어, Apache Commons Math 라이브러리를 사용하여 정규 분포를 따르는 랜덤 값을 생성하는 방법은 다음과 같습니다.

import org.apache.commons.math3.distribution.NormalDistribution;

public class RandomNumberGenerator {
    public static void main(String[] args) {
        NormalDistribution normalDistribution = new NormalDistribution(mean, standardDeviation);
        double randomNumber = normalDistribution.sample();
        System.out.println("Random Number: " + randomNumber);
    }
}

위 코드에서 meanstandardDeviation은 정규 분포의 평균과 표준 편차를 나타냅니다.

결론

자바에서는 기본적인 균일한 확률 분포 외에도 다양한 확률 분포를 따르는 랜덤 값 생성을 지원하는 라이브러리를 사용하여 확률을 고려한 랜덤 넘버를 생성할 수 있습니다. 필요에 따라 적절한 라이브러리를 선택하여 확률 분포를 지정한 랜덤 값 생성에 활용할 수 있습니다.

참고자료