모두의 코드 커뮤니티

배열 활용한 로또 프로그램 만들기 질문입니다.

배열 활용한 로또 프로그램 만들기 질문입니다.
int main()
{
srand((unsigned int)time(0));

// lotto Program
int Lotto[45] = {};

// 1에서 45
for (int i = 0; i < 45; ++i)
{
	Lotto[i] = i + 1;
}


// Shuffle
int iTemp, idx1, idx2;
// 100 번 정도 골고루 섞어준다. 
for (int i = 0; i < 100; ++i)
{
	idx1 = rand() % 45;
	idx2 = rand() % 45;

	iTemp = Lotto[idx1];
	Lotto[idx1] = Lotto[idx2];
	Lotto[idx2] = iTemp;
}

for (int i = 0; i < 45; ++i)
{
	cout << Lotto[i] << endl;
}
return 0;

}

궁금한점이
for (int i = 0; i < 100; ++i)
{
idx1 = rand() % 45;
idx2 = rand() % 45;

	iTemp = Lotto[idx1];
	Lotto[idx1] = Lotto[idx2];
	Lotto[idx2] = iTemp;
}

이 부분인데요 숫자가 100번을 섞었기 때문에 중복이 안된다고 하던데
중복이 안되는 이유를 모르겠습니다. 100번 반복 시켰을 뿐이지
반복에 대한 제한은 없는거 같은데 어떻게 반복이 안되는지 알 수 있을까요?

좋아요 1

애초에 처음에 Lotto 배열에 값을 넣었을 때 1 부터 46 까지 넣었죠?

그 다음에 섞는 부분

	iTemp = Lotto[idx1];
	Lotto[idx1] = Lotto[idx2];
	Lotto[idx2] = iTemp;

에서는 그냥 임의의 두 원소를 골라서 위치만 바꾸는 것이니까 같은 숫자가 나올 일은 없죠.

아… 감사합니다. 배열을 제대로 이해를 못하고 있었던거 같네요 ^^ 이해가 되었습니다. 감사합니다!!

좋아요 1