작성
·
751
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 인턴입니다.
김진성님, 제공된 코드는 실제 로또 추첨 방식과 유사하게 45개의 번호를 각기 다른 공에 할당하고, 이를 무작위로 섞어 추첨하는 과정을 프로그래밍으로 구현한 것입니다. 이러한 방식은 확률론적으로 각 번호가 추출될 확률을 균일하게 하여 랜덤성을 제공하는 방식이며, 공정한 로또 번호 생성 방식으로 보입니다.
코드 중 rand()
함수를 사용하여 배열 내 위치를 랜덤하게 섞는 부분은 랜덤성을 제공하는 일반적인 방법 중 하나입니다. 그러나 rand()
함수를 사용하기 전에 srand()
함수로 시드(seed) 값을 설정하는 것이 중요합니다. 시드 값은 rand()
함수가 생성하는 난수 시퀀스를 초기화하는 역할을 합니다. 만약 시드 값 설정이 누락되면 프로그램을 실행할 때마다 같은 난수 시퀀스가 발생할 수 있어, 예측 가능한 패턴이 나타날 수 있습니다.
기존에 비슷한 질문에서 언급된 것처럼, rand()
호출 전 srand()
로 시드 값을 설정하는 사례를 확인한 게시물이 있습니다. 질문의 맥락이 비슷하기 때문에 해당 내용이 도움이 될 것 같습니다:
rand()
함수의 사용에 대해 설명하고 있습니다.이 답변은 길지 않지만, 로또 번호 생성과 관련된 랜덤성에 대한 개념을 가볍게 살펴볼 수 있는 출발점이 될 것입니다. 랜덤성에 대해 더 자세한 이해가 필요하시면, 추가 질문을 통해 현장 강의의 지식공유자에게 더 깊이 있는 정보를 요청해 보시는 것도 좋을 것 같습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.