1. 서론
C 프로그래밍 언어는 저수준 시스템 프로그래밍과 게임 개발에서 널리 사용됩니다. 그 많은 응용 분야 중에서 “난수 생성”은 자주 활용됩니다. 예를 들어, 게임에서 무작위 요소를 생성하거나, 시뮬레이션을 실행하거나, 암호화를 수행하거나, 테스트 데이터를 생성하는 데 사용되며, 그 외에도 많은 용도로 쓰입니다.
이 기사는 C에서 지정된 범위 내의 난수를 생성하는 방법을 구체적인 예제를 통해 설명합니다. 난수 생성의 메커니즘을 이해하고 실제 프로그램에 적용할 수 있도록 돕기 위해 작성되었습니다.
2. C에서의 난수 생성 기본
C에서는 표준 라이브러리 <stdlib.h>를 사용하여 난수를 생성합니다. rand() 함수는 0부터 RAND_MAX (약 2147483647)까지의 정수 난수를 생성합니다. 그러나 동일한 시드 값을 사용하면 프로그램을 실행할 때마다 동일한 난수 시퀀스가 생성됩니다.
의사 난수 생성 및 시드 값 설정
난수 생성에서 중요한 개념은 “시드 값”입니다. 시드는 난수 시퀀스의 시작점을 결정합니다. 이를 설정하지 않으면 프로그램을 실행할 때마다 동일한 숫자가 생성됩니다. 이를 피하기 위해 srand() 함수를 사용하여 시드를 설정합니다. 일반적으로 현재 시간을 시드로 설정하기 위해 time() 함수를 사용합니다.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
srand((unsigned int)time(NULL));
printf("%dn", rand());
return 0;
}
이렇게 하면 프로그램을 실행할 때마다 다른 난수가 생성됩니다.
3. 지정된 범위 내의 난수 생성
특정 범위 내의 난수를 원한다면 rand() 함수의 결과를 수학적 연산으로 적용해야 합니다. 범위 내 난수를 생성하는 기본 공식은 다음과 같습니다:
rand() % (max - min + 1) + min
이 공식은 min과 max 사이(포함)의 정수 난수를 생성합니다.
샘플 코드: 범위 내 난수 생성
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
int min = 1;
int max = 100;
srand((unsigned int)time(NULL));
int random_number = rand() % (max - min + 1) + min;
printf("Random number between %d and %d: %dn", min, max, random_number);
return 0;
}
이 코드는 1에서 100 사이의 난수를 생성하고 출력합니다.
4. 부동소수점 난수 생성
부동소수점 난수를 생성하려면 rand() 함수와 RAND_MAX를 사용하여 스케일링합니다. 0.0과 1.0 사이의 난수를 생성하려면 다음 코드를 사용합니다:
샘플 코드: 부동소수점 난수 생성
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
srand((unsigned int)time(NULL));
double random_number = (double)rand() / RAND_MAX;
printf("Random number between 0.0 and 1.0: %fn", random_number);
return 0;
}
이 프로그램은 0에서 1 사이의 난수를 생성합니다. 스케일링을 적용하면 임의의 부동소수점 범위 내 난수를 생성할 수 있습니다. 예를 들어, 0.0에서 5.0 사이의 숫자를 얻으려면 결과를 5로 곱합니다.

5. 난수의 실용적 응용
주사위 시뮬레이션
게임 개발에서 주사위 시뮬레이션은 난수 사용의 일반적인 예입니다. 다음 코드는 1에서 6 사이의 난수를 생성하여 주사위 굴리기를 시뮬레이션합니다:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
srand((unsigned int)time(NULL));
int dice_roll = rand() % 6 + 1;
printf("Dice roll: %dn", dice_roll);
return 0;
}
몬테카를로 방법으로 π 근사
몬테카를로 방법은 난수를 사용하여 분석적으로 해결하기 어려운 문제의 해를 근사합니다. 다음 코드는 난수를 사용하여 π를 근사하는 것을 보여줍니다:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
int n_trials = 1000000;
int n_inside = 0;
double x, y, pi;
srand((unsigned int)time(NULL));
for (int i = 0; i < n_trials; i++) {
x = (double)rand() / RAND_MAX;
y = (double)rand() / RAND_MAX;
if (x * x + y * y <= 1) {
n_inside++;
}
}
pi = 4.0 * n_inside / n_trials;
printf("Approximated π: %fn", pi);
return 0;
}
이 방법은 무작위 수를 생성하고 그 중 몇 개가 단위 원 안에 들어가는지를 평가함으로써 π를 계산합니다. 이는 물리 시뮬레이션 및 확률 모델링에서 널리 사용됩니다.
6. Conclusion
이 기사에서는 C에서 지정된 범위 내에서 무작위 수를 생성하는 방법을 다루었습니다. rand()와 srand()의 기본 사용법, 정수 및 부동소수점 범위에서의 수 생성, 그리고 주사위 시뮬레이션 및 몬테카를로 방법과 같은 실용적인 응용 사례를 살펴보았습니다. 무작위 수 생성은 게임 개발 및 시뮬레이션을 포함한 많은 분야에서 필수적인 기술입니다.
이러한 기술을 향후 프로젝트에 적용하여 기능 다양성을 향상시켜 보세요.



