inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문

로또 번호 생성기

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

931

한진성

작성한 질문수 1

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 배열에 담아주었습니다.

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

c++

답변 2

0

Rookiss

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

0

인프런 AI 인턴

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

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

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

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

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

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

소스코드와 관련하여 질문드립니다

0

70

1

map 컨테이너의 emplace 함수에 대해

0

113

2

시작이 안되네요...!

0

96

2

EAX 명령어 실행 시 RAX의 상위 32비트가 초기화 되는 이유

0

125

1

리틀 엔디안 장점 질문합니다.

0

131

1

메모리 창에 주소를 넣었는데 영어 꺠짐

0

124

1

타입변환#2 build시 knight 인접 stack이 침범당했다는 error가 발생합니다.

0

94

2

map #1 8분 58초 맵은 레드블랙트리로 이루어진 것 같습니다.

1

138

2

hello world 부터 오류 ㅠㅜ

0

188

1

지역변수가 스택? 레지스터

0

129

2

마지막 문제 질문드립니다.

0

164

2

메모리창이 비활성화됩니다.

0

98

1

이중포인터 강좌 부분 질문있습니다.

0

145

1

2를 더하는 이유

0

133

1

메모리 주소 창 엔디안 질문 드립니다. 인프런 봇 답변도 괜찮습니다

1

110

1

해당 코드는 왜 오류가 날까요?

0

155

1

마지막 문제 질문 있습니다.

0

119

1

강의 마지막부분에 질문이 있습니다.

0

191

2

Field초기화

0

140

1

virtual과 override 차이

0

314

2

3:30 참조자 리턴

0

167

1

map 찾기

0

158

1

프로그램 질문드려요

0

260

1

캐스팅 질문

0

138

1