C++에서 난수 생성하기
이번 글에서는 C++를 사용해 난수(random number)를 생성하는 방법을 알아보겠습니다. 여기서는 0부터 특정 값까지 범위 내에서 난수를 생성하며, 이 프로그램에서는 최대값을 100으로 설정했습니다.
이 작업을 수행하기 위해 C 표준 라이브러리에 포함된 srand() 함수를 사용합니다. void srand(unsigned int seed) 함수는 rand 함수가 사용하는 의사 난수 생성기(pseudorandom number generator)에 시드(seed) 값을 설정하는 역할을 합니다.
srand() 함수의 선언
void srand(unsigned int seed)
srand() 함수는 'seed'라는 매개변수 하나를 받습니다. 이 시드 값은 의사 난수 생성 알고리즘이 난수를 만들기 위해 사용하는 정수 값입니다. 이 함수는 별도의 반환값이 없습니다.
rand() 함수로 난수 얻기
실제 난수를 얻으려면 rand() 메서드가 필요합니다. 0부터 최대값(max) 사이의 숫자를 구하기 위해서는 나머지 연산자(%)를 사용해 모듈로 연산을 수행합니다. 예를 들어 rand() % 100은 항상 0부터 99 사이의 값을 반환합니다.
시드 값으로는 time(0) 함수의 결과를 srand() 함수에 전달합니다. time(0)은 현재 시간을 초 단위로 반환하므로, 프로그램을 실행할 때마다 다른 시드가 적용되어 매번 새로운 난수를 얻을 수 있습니다.
예제 코드
#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
int main(){
int max = 100; // 난수 생성의 상한값 설정
srand(time(0));
cout << "The random number is: " << rand() % max;
return 0;
}실행 결과
프로그램을 실행할 때마다 서로 다른 난수가 출력되는 것을 확인할 수 있습니다.
출력 1
The random number is: 51
출력 2
The random number is: 29
출력 3
The random number is: 47
정리
C++에서 난수를 생성하려면 먼저 srand(time(0))으로 시드를 초기화한 뒤, rand() % max 형태로 원하는 범위의 난수를 얻으면 됩니다. 시드를 초기화하지 않으면 프로그램을 실행할 때마다 동일한 난수가 출력되므로 반드시 기억해 두어야 합니다. 또한 참고로 C++11 이후에는 <random> 헤더의 mt19937, uniform_int_distribution 등을 활용하면 더 균등하고 품질 좋은 난수를 생성할 수 있습니다.