관리 메뉴

사적공간

주사위를 10번 굴려, 1~6 까지 무작위 출현 빈도를 배열에 값으로 저장 후 출력 본문

자격증/정보처리기사_실기

주사위를 10번 굴려, 1~6 까지 무작위 출현 빈도를 배열에 값으로 저장 후 출력

2sac 2024. 3. 28. 21:57

주사위를 10번 굴려, 1~6 까지 무작위 출현 빈도를 배열에 값으로 저장 후 출력
(18년도 3회 기출문제 )

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

void main() { 
    int hist[6] = {0, };    // 1. 크기가 6인 정수 배열 hist를 선언하고 0으로 초기화합니다. 각 요소는 주사위의 눈의 빈도를 저장합니다.

    int n, i = 0;   // 2. 변수 n과 i를 선언하고 i를 0으로 초기화합니다.

    srand(time(NULL));   // 3. srand 함수를 호출하여 현재 시간을 기반으로 시드를 설정합니다. 이는 무작위한 난수 생성을 위한 초기화입니다.
    
    do{ // 4. do-while 루프: 주사위를 10번 던지고 각 던진 결과를 기록합니다.
        i++;    // 5. i를 증가시킵니다.
        n = rand()%6 + 1;   // 6. 1부터 6까지의 난수를 생성하여 n에 저장합니다. 이는 주사위의 눈을 나타냅니다.
        hist[n-1] += 1; // 7. hist 배열에서 n-1 위치의 요소에 1을 더하여 주사위의 눈의 빈도를 기록합니다.
    }   while(i<10);   // 8. i가 10보다 작을 때까지 루프를 반복합니다.
    
    for(i=0; i<6; i++)  // 9. for 루프: 1부터 6까지의 주사위 눈에 대해 빈도를 출력합니다.
        printf("h[%d] = %d\n", i, hist[i]);  // 10. hist 배열의 각 요소를 출력합니다.
}

 

`rand()%6`는 0부터 5까지의 난수를 생성합니다. 주사위의 경우 눈은 1부터 6까지 있으므로 이를 맞추기 위해 1을 더해줍니다. 따라서 `rand()%6 + 1`은 1부터 6까지의 난수를 생성합니다.
`n = rand() % 7`을 사용하는 것은 올바른 방법이 아닙니다. 이렇게 하면 0부터 6까지의 값을 얻게 되므로, 주사위의 눈을 표현하기에 적합하지 않습니다. 주사위의 눈은 1부터 6까지이므로, 1부터 6까지의 값을 얻기 위해선 `rand() % 6 + 1`을 사용해야 합니다. 여기서 `rand() % 6`은 0부터 5까지의 값을 생성하게 되고, 여기에 1을 더해주면 1부터 6까지의 값을 얻을 수 있습니다. 따라서 `n = rand() % 6 + 1`이 올바른 방법입니다.

 

h[0] = 1
h[1] = 3
h[2] = 1
h[3] = 2
h[4] = 2
h[5] = 1

 

 

출처: chatgpt3.5