• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

이런 방식으로 로또 번호를 생성하는 것도 랜덤이라고 볼 수 있을까요?

24.02.05 15:37 작성 조회수 239

0

void ChooseLotto(int numbers[], int count) {

    // 랜덤으로 1~45 사이의 숫자 6개.... 중복 없이
    int lotto[45];

    for (int i = 0; i < 45; i++) {
        lotto[i] = i + 1;
    }
    // 공을 섞는 과정
    for (int i = 0; i < 1000; i++) {
        int randNum1 = rand() % 45;
        int randNum2 = rand() % 45;
        Swap(&lotto[randNum1], &lotto[randNum2]);
    }

    for (int i = 0; i < count; i++) {
        numbers[i] = lotto[i];
    }

}

안녕하세요, 강의 잘 보고 있습니다. 저는 실습 풀이를 이렇게 했는데요.

로또 추첨을 할 때 커다란 통에 공을 집어넣고 6개의 번호가 쓰인 공을 꺼낸다고 하면, 한 번 꺼낸 공은 다시 추첨기에서 나오지 않아야 한다고 생각했습니다.

따라서 1~45의 값이 들어있는 배열을 선언하고, 해당 배열을 rand()와 swap()을 이용해 계속 반복하여 섞어주고, 마지막에 0번~5번 인덱스까지 6개의 수를 numbers 배열에 담아주었습니다.

이런 방식으로 로또 번호를 생성하는 것도 랜덤으로 번호를 생성한 것이라고 볼 수 있을까요?

답변 2

·

답변을 작성해보세요.

0

네 실제로 그렇게 하는 경우도 있습니다.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.02.05

안녕하세요, 인프런 AI 인턴입니다.

김진성님, 제공된 코드는 실제 로또 추첨 방식과 유사하게 45개의 번호를 각기 다른 공에 할당하고, 이를 무작위로 섞어 추첨하는 과정을 프로그래밍으로 구현한 것입니다. 이러한 방식은 확률론적으로 각 번호가 추출될 확률을 균일하게 하여 랜덤성을 제공하는 방식이며, 공정한 로또 번호 생성 방식으로 보입니다.

코드 중 rand() 함수를 사용하여 배열 내 위치를 랜덤하게 섞는 부분은 랜덤성을 제공하는 일반적인 방법 중 하나입니다. 그러나 rand() 함수를 사용하기 전에 srand() 함수로 시드(seed) 값을 설정하는 것이 중요합니다. 시드 값은 rand() 함수가 생성하는 난수 시퀀스를 초기화하는 역할을 합니다. 만약 시드 값 설정이 누락되면 프로그램을 실행할 때마다 같은 난수 시퀀스가 발생할 수 있어, 예측 가능한 패턴이 나타날 수 있습니다.

기존에 비슷한 질문에서 언급된 것처럼, rand() 호출 전 srand()로 시드 값을 설정하는 사례를 확인한 게시물이 있습니다. 질문의 맥락이 비슷하기 때문에 해당 내용이 도움이 될 것 같습니다:

이 답변은 길지 않지만, 로또 번호 생성과 관련된 랜덤성에 대한 개념을 가볍게 살펴볼 수 있는 출발점이 될 것입니다. 랜덤성에 대해 더 자세한 이해가 필요하시면, 추가 질문을 통해 현장 강의의 지식공유자에게 더 깊이 있는 정보를 요청해 보시는 것도 좋을 것 같습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.