더북(TheBook)

6.6.2 조합할 약병 번호 선택하기

테스트 회차마다 약병을 몇 개 조합할지 정했습니다. 그런데 1, 2, 3, 4번 중 어떤 약병을 조합할지는 모르는 상태입니다. 이번에는 조합할 약병 번호를 정하겠습니다.

약병은 이번 회차에 조합할 약병 개수만큼, 즉 cntShowBottle 변수의 값만큼 선택해야 합니다. 회차당 2~3개를 선택하므로 for 문으로 작성합니다. 조건은 cntShowBottle 변수의 값까지입니다. cntShowBottle 값이 2이면 2회, 3이면 3회 반복합니다.

4개 중에서 무작위로 선택하므로 0~3에서 하나를 뽑도록 rand() % 4를 합니다. 그리고 결과를 randBottle이라는 정수형 변수를 만들어 저장합니다.

현재 약병은 bottle 배열에 저장되어 있고 이 중에서 1개를 뽑습니다. 이때 rand()함수로 계산한 결과를 bottle 배열의 인덱스로 사용하면 배열에 저장된 약병을 무작위로 선택할 수 있습니다.

현재 bottle 배열은 값이 모두 0으로 저장된 상태입니다. 약병을 뽑으면 약병 값을 0에서 1로 바꿔 선택됐음을 표시합니다. 만약에 rand()함수의 결과로 이미 뽑은 약병이 또 선택됐다면 중복이므로 다시 선택해야 합니다. 중복인지는 어떻게 알까요? rand()함수로 뽑은 숫자를 인덱스로 하는 요소의 값, 즉 bottle[randBottle] 값이 1이면 중복이겠죠. 이 부분을 조건문으로 확인합니다. bottle[randBottle] 값이 0이라면 bottle[randBottle]의 값을 1로 바꿉니다. 0이 아니라면 중복이므로 다시 선택합니다.

그림 6-9 bottle 배열의 상태 표시

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.