C++에서 난수를 생성하는 방법을 알아보겠습니다. 이 글에서는 0부터 특정 값까지의 범위에서 난수를 생성하는 방법을 다룹니다. (이 예제에서는 최댓값을 100으로 설정했습니다.)
srand() 함수란?
난수를 생성하기 위해 C 표준 라이브러리에서 제공하는 srand() 함수를 사용합니다. 이 함수의 원형은 void srand(unsigned int seed)로, rand() 함수가 사용하는 의사 난수 생성기(pseudo-random number generator)의 시드(seed)를 초기화하는 역할을 합니다.
srand() 함수의 선언 형태는 다음과 같습니다.
void srand(unsigned int seed)
이 함수는 seed라는 매개변수를 하나 받습니다. seed는 의사 난수 생성 알고리즘의 시작점으로 사용되는 정수 값입니다. srand() 함수는 별도의 반환값을 가지지 않습니다.
rand() 함수로 난수 얻기
실제 난수를 얻으려면 rand() 함수를 사용해야 합니다. 0부터 최댓값(max) 사이의 숫자를 얻기 위해서는 나머지 연산자(%)를 활용하여 값을 제한합니다.
또한 실행할 때마다 다른 난수가 나오도록 하려면, time(0) 함수의 반환값을 srand()에 전달하여 매번 다른 시드를 설정하는 것이 일반적입니다. time(0)은 현재 시간을 초 단위로 반환하므로, 프로그램이 실행되는 시점마다 서로 다른 시드 값이 만들어집니다.
예제 코드
#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
int main() {
int max;
max = 100; // 난수 생성의 상한값을 100으로 설정
srand(time(0));
cout << "The random number is: " << rand()%max;
return 0;
}코드 설명
#include<cstdlib>: rand()와 srand() 함수를 사용하기 위해 포함합니다.#include<ctime>: time() 함수를 사용하기 위해 포함합니다.srand(time(0)): 현재 시간을 시드로 설정하여 매 실행마다 다른 난수 시퀀스를 만듭니다.rand()%max: rand()가 반환한 값에 100으로 나머지 연산을 수행하여 0~99 범위의 난수를 얻습니다.
실행 결과
프로그램을 여러 번 실행하면 매번 다른 결과가 출력됩니다.
출력 1
The random number is: 51
출력 2
The random number is: 29
출력 3
The random number is: 47
마무리
C++에서 난수를 생성하는 핵심은 srand()로 시드를 초기화하고, rand()와 나머지 연산자를 조합해 원하는 범위의 값을 얻는 것입니다. 특히 time(0)을 시드로 사용하면 프로그램을 실행할 때마다 새로운 난수를 얻을 수 있다는 점을 기억하세요. 참고로 C++11 이상에서는 <random> 헤더의 mt19937, uniform_int_distribution 등을 활용하면 더 균일하고 품질 높은 난수를 생성할 수 있습니다.