로또에 당첨되기 위해선 1부터 45의 수에서 내가 뽑은 6개의 숫자와 기계가 뽑은 6개의 숫자 중 3개 이상이 맞으면 된다. 6개의 모든 수가 맞으면 1등이 되고 엄청난 돈을 받아 부자가 된다.
5개를 맞추면 2등이어야 하는데 3등이다. 왜 일까? 운은 있지만 운이 없는? 5개를 맞춘 사람을 위해 한번 더 기회를 주기 때문이다. 한개의 보너스 수를 더 뽑고 앞에서 맞춘 5개의 수와 보너스 숫자까지 맞추면 2등을 시켜준다. 사실 이것도 6개 맞추긴한건데... 뭔가 억울하다.
앞에서 배운 내용을 복습하라 겸 로또 번호를 생성해주는 프로그램을 만들어보자. 랜덤하게 수를 뽑을 건데 중복으로 같은 수를 뽑는 것을 방지하기 위해 메모이제이션 기법이라는 것을 이용해볼 것이다.
실행 결과는 위와 같고 코드는 아래와 같다.
#include <iostream>
#include <random>
using namespace std;
int getRandomNumber (int min, int max) {
// 씨드 설정
random_device rd;
mt19937 seed(rd());
//분포 설정
uniform_int_distribution<int> range(min, max);
//랜덤 값 생성
return range(seed);
}
int main()
{
const int MIN = 1;
const int MAX = 45;
int arr[MAX+1];
int pickedBall;
// 초기화 작업 - 메모이제이션
for (int i=MIN; i<=MAX; i=i+1) {
arr[i] = 0;
}
// 총 7개의 수를 뽑음
for (int i=1; i<=7; i++) {
while(true) {
pickedBall = getRandomNumber(MIN, MAX);
if (arr[pickedBall]==0) { // 이전에 뽑았는지 확인
break; // 뽑은 적이 없다면 OK
}
}
if (i==7) {
cout << " (BONUS: " << pickedBall << ")" << endl;
} else {
arr[pickedBall] = 1; // 뽑았다고 표시
cout << pickedBall << " ";
}
}
return 0;
}
여기에 들어가면 언제든지 위의 코드를 실행해 볼 수 있으니 필요하면 여기에 들어가서 로또 번호를 생성해서 부자가 되어보자.