1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
#include <iostream>
#include <time.h>
int main() {
int lotto[45];
srand((unsigned int)time(NULL));
for (int i = 0; i < 45; ++i) {
lotto[i] = i + 1;
}
int idx1, idx2, tmp;
for (int i = 0; i < 100; ++i) {
idx1 = rand() % 45;
idx2 = rand() % 45;
tmp = lotto[idx1];
lotto[idx1] = lotto[idx2];
lotto[idx2] = tmp;
// 이렇게 할 경우 idx1 인덱스의 값은 이미 lotto[idx2] 값이 들어가있으므로
// lotto[tmp] 또한 마찬가지로 lotto[idx2] 값과 같을 수밖에 없다.
/*tmp = idx1;
lotto[idx1] = lotto[idx2];
lotto[idx2] = lotto[tmp];*/
}
for (int i = 0; i < 45; ++i) {
std::cout << lotto[i] << "\t";
}
std::cout << std::endl << std::endl;
for (int i = 0; i < 6; ++i) {
std::cout << lotto[i] << "\t";
}
std::cout << "보너스 번호 : " << lotto[6] << std::endl;
return 0;
}
|
cs |
1 ~ 45 사이의 값 중 중복 없이 임의의 번호 6개와 보너스 번호 1개 총 7개를 추출하는 코드입니다.
로또 번호 45개를 저장할 배열 lotto[45]를 선언하고 값을 할당합니다.
임의의 숫자 추출을 위해 rand() 함수를 이용할 것이므로 seed값이 계속해서 변동되도록 srand 함수를 6 번째 라인과 같이 호출해줍니다.
셔플 알고리즘입니다.
특정 배열의 값을 섞어주는 방법으로, 여기서는 lotto[45] 의 배열에 저장된 값들을 서로 섞어주고 있습니다.
아마도 임의 추출의 경우 그냥 rand() % 45 를 6번 동작시키면 된다고 생각하시는 분들이 계실 것 같습니다.
하지만 이럴 경우 중복 값도 포함돼서 출력되기 때문에 위와 같은 방법을 활용합니다. 라인 별로 코드를 분석해 보겠습니다.
먼저 12 번째 라인에서 각 배열의 인덱스 역할을 할 idx1, idx2를 선언하여 줍니다.
14 ~ 16 번째 라인에서 반복문을 100번 돌리며 idx1, idx2에 각각 0~44 사이의 임의의 값을 할당합니다. 위에서 말했던 것 처럼 rand() % 45의 값이 중복될 수 있으므로 반복문을 100번 돌려 중복의 확률을 최대한 줄여주는 것입니다.
18 ~ 20 번째 라인은 swap 동작입니다. 쉽게 말해 lotto[idx1]의 값과 lotto[idx2]의 값을 바꿔주는 과정입니다. 어렵지 않은 코드이니 알아볼 수 있을 것이라 생각합니다.
22 ~ 26 번째 라인은 실수할 수 있는 부분을 주석으로 작성해 둔 것입니다. 코드에 대한 주의사항은 주석으로 작성해두었기 때문에 생략하겠습니다.
셔플 알고리즘의 경우 하스스톤 등과 같은 카드 게임에서 사용될 수 있는 알고리즘입니다. 알아두면 좋을 것 같습니다.
29 ~ 31 번째 라인은 lotto[45] 배열의 원소들이 제대로 섞였는지 확인하는 코드입니다.
35 ~ 39 번째 라인은 6개의 번호와 1개의 보너스 번호를 출력하는 코드입니다.
잘못된 부분이나 개선 사항은 언제나 편하게 댓글로 지적해주세요.
감사합니다.
출처
'C,C++ > 코드정리' 카테고리의 다른 글
[C/C++] 빙고 게임 구현 (0) | 2022.09.07 |
---|---|
[C/C++] 숫자 퍼즐 게임 구현 (0) | 2022.09.07 |
[C/C++] 야구게임 구현 (0) | 2022.09.07 |
[C/C++] 별찍기 구현 (0) | 2022.09.07 |
[C/C++] 가위바위보 게임 구현 (0) | 2022.09.07 |
댓글