본문 바로가기
카테고리 없음

[예제] C언어로 주사위 2개를 100번 던져 각 숫자의 빈도수 구하기

by heydayz 2024. 8. 12.

C언어로 주사위 2개를 100번 던져 각 숫자의 빈도수 구하기 시뮬레이션

C언어로 주사위 2개를 100번 던져 각 숫자의 빈도수 구하기 프로그램을 만들기 위해서는 상수를 정의해야 합니다. 상수는 주사위 면의 수와 던지는 횟수를 상수로 정의합니다. 그리고 배열도 선언해야 하는데요. 주사위 합의 빈도수를 저장하기 위한 배열 count를 선언합니다. 배열의 크기는 주사위 합의 최솟값(2)부터 최댓값(12)까지를 커버하기 위해 2*DICE_NUM+1로 설정합니다. 그리고 각 각의 예측되지 않는 숫자를 정하기 위해 srand(time(NULL)) 함수를 이용하여 난수 생성 시드를 설정합니다. 이를 통해 매번 다른 난수를 생성할 수 있습니다.
저는 주사위 던지기 시뮬레이션을 for 루프를 이용하여 주사위를 100번 던지는 시뮬레이션을 수행합니다. 각 던짐마다 두 개의 주사위 눈금을 랜덤하게 생성하고, 그 합을 계산하여 count 배열의 해당 인덱스에 1을 더해 빈도수를 증가시킬 것입니다. 결과는 for 루프를 이용하여 각 주사위 합에 대한 빈도수를 출력합니다.

난수 생성: rand() 함수를 이용하여 1~6 사이의 난수 생성
배열: 각 숫자가 나온 횟수를 저장하기 위한 1차원 배열
<stdio.h>: 표준 입출력 라이브러리
<stdlib.h>: 난수 생성 함수(rand)를 사용하기 위한 라이브러리
<time.h>: 난수 생성 시 시드값을 설정하기 위한 라이브러리

코드 구현 및 설명

#include <stdio.h>  
#include <stdlib.h>  
#include <time.h>

#define DICE\_NUM 6 // 주사위 면의 수  
#define TRIAL\_NUM 100 // 주사위 던지는 횟수

int main() {  
int dice1, dice2, sum;  
int count\[2\*DICE\_NUM+1\] = {0}; // 주사위 합의 범위 (2~12)를 커버하는 배열

```
// 난수 생성 초기화
srand(time(NULL));

// 주사위 100번 던지기
for (int i = 0; i < TRIAL_NUM; i++) {
    dice1 = rand() % DICE_NUM + 1;
    dice2 = rand() % DICE_NUM + 1;
    sum = dice1 + dice2;
    count[sum-2]++; // 배열 인덱스를 맞추기 위해 2를 뺌
}

// 결과 출력
printf("주사위 합\t빈도\n");
for (int i = 2; i <= 2*DICE_NUM; i++) {
    printf("%d\t%d\n", i, count[i-2]);
}

return 0;
```

}

#define DICE_NUM 6는 주사위가 6까지 이루어져 있어 각각의 면의 수를 의미합니다.
#define TRIAL_NUM 100 은 시뮬레이션에서 100까지 주사위 던지는 횟수를 의미합니다.
int count[2*DICE_NUM+1] = {0}는 주사위 합의 범위 (2~12)를 커버하는 배열을 의미합니다.

코드 설명

주사위 합의 빈도수: 단순히 각 주사위 눈금의 빈도수를 구하는 것이 아니라, 두 주사위의 합에 대한 빈도수를 구하는 문제를 해결했습니다.
배열 인덱스 조정: 배열 인덱스를 조정하여 주사위 합과 배열 인덱스 간의 관계를 명확하게 설정했습니다.
난수 생성 초기화: srand(time(NULL)) 함수를 사용하여 매번 다른 난수를 생성하도록 하여 실험의 신뢰도를 높였습니다.
코드 가독성: 주석을 통해 각 코드 부분의 역할을 명확하게 설명하여 코드의 가독성을 높였습니다.

주사위 합: 단순히 주사위 눈금의 빈도수를 구하는 것이 아니라, 두 주사위의 합에 대한 빈도수를 구하는 문제를 다루어 다른 예제와 차별화했습니다.
배열 인덱스 조정: 배열 인덱스를 조정하여 주사위 합과 배열 인덱스 간의 관계를 명확하게 설정하는 방식이 다른 예제와 차별화됩니다.
난수 생성 초기화: srand(time(NULL)) 함수를 사용하여 난수 생성 시드를 설정하는 부분이 다른 예제와 차별화됩니다.
코드 주석: 상세한 주석을 통해 코드의 이해를 돕고, 다른 예제와 차별화했습니다.
핵심: 이 코드는 주사위 2개를 던지는 시뮬레이션을 통해 각 주사위 합의 빈도수를 구하는 알고리즘을 구현합니다. 난수 생성, 배열 활용, 반복문 등 기본적인 C언어 문법을 활용하여 문제를 해결하며, 확률과 통계 개념을 간단하게 이해하는 데 도움이 될 수 있습니다.