본문 바로가기

JAVA

로또 번호 시뮬레이션 코드

로또 1등은 6개의 숫자가 일치해야 합니다. 당첨 확률은 1/8,145,060 입니다. 0.0000122773804% 입니다.

아래 코드는 1 ~ 45까지의 숫자를 900만번 실행한 많이 나온 상위 6개의 숫자를 출력한 JAVA 코드 입니다.

 

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;

public class LottoStatistics {

    public static void main(String[] args) {
        // 1부터 45까지의 숫자 리스트 생성
        List<Integer> numbers = new ArrayList<>();
        for (int i = 1; i <= 45; i++) {
            numbers.add(i);
        }

        // 각 숫자의 카운트를 저장할 맵 생성
        Map<Integer, Integer> count = new HashMap<>();
        for (int number : numbers) {
            count.put(number, 0);
        }

        // 900만 번 시뮬레이션 실행
        Random random = new Random();
        for (int i = 0; i < 9000000; i++) {
            // 6개의 숫자 랜덤하게 선택
            List<Integer> selectedNumbers = new ArrayList<>();
            for (int j = 0; j < 6; j++) {
                int index = random.nextInt(numbers.size());
                selectedNumbers.add(numbers.get(index));
                numbers.remove(index);
            }
            // 각 숫자의 카운트 증가
            for (int number : selectedNumbers) {
                count.put(number, count.get(number) + 1);
            }
            // 다시 원래의 숫자 리스트로 복원
            numbers.addAll(selectedNumbers);
            Collections.sort(numbers);
        }

        // 숫자별 카운트 내림차순으로 정렬
        List<Map.Entry<Integer, Integer>> sortedCount = new ArrayList<>(count.entrySet());
        Collections.sort(sortedCount, (a, b) -> b.getValue().compareTo(a.getValue()));

        // 상위 6개 출력
        for (int i = 0; i < 6; i++) {
            System.out.println((i+1) + "th: " + sortedCount.get(i).getKey() + "(" + sortedCount.get(i).getValue() + ")");
        }
    }

}

 

'JAVA' 카테고리의 다른 글

JAVA Instant  (0) 2023.04.11
public static void main  (0) 2023.03.25