로또 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 |