이 글에서는 C++ STL에서 제공하는 rand()와 srand() 함수의 동작 원리, 문법, 그리고 실제 사용 예제를 자세히 살펴보겠습니다.
rand()란 무엇인가?
rand() 함수는 C++ STL에 내장된 함수로, <cstdlib> 헤더 파일에 정의되어 있습니다. rand()는 일련의 난수(random number)를 생성하는 데 사용되며, 코드에서 임의의 숫자가 필요할 때 활용됩니다.
예를 들어, C++로 보드게임을 만들 때 1부터 6 사이의 임의의 숫자를 생성해야 한다면 rand() 함수를 사용하면 됩니다.
난수는 이 함수가 호출될 때마다 서로 관련 없는 숫자 열을 생성하는 알고리즘을 통해 만들어집니다.
예를 들어 1~6 사이의 난수를 생성하고 싶다면 다음과 같이 사용합니다.
Num = rand() % 6 + 1;
문법
int rand();
매개변수
이 함수는 어떤 매개변수도 받지 않습니다.
반환값
이 함수는 0부터 RAND_MAX 사이의 정수 값을 반환합니다.
입력
rand() % 100 + 1;
출력
57
예제
rand()
#include <stdio.h>
#include <stdlib.h>
int main(void){
printf("Randomly generated numbers are: ");
for(int i = 0; i<5; i++)
printf(" %d ", rand());
return 0;
}
출력 결과
이 코드를 처음 실행했을 때의 출력은 다음과 같습니다.
Randomly generated numbers are: 1804289383 846930886 1681692777 1714636915 1957747793
N번째 실행했을 때의 출력 역시 동일합니다.
Randomly generated numbers are: 1804289383 846930886 1681692777 1714636915 1957747793
위 결과에서 볼 수 있듯이, srand()로 시드(seed)를 설정하지 않으면 프로그램을 몇 번 실행하든 항상 같은 난수 시퀀스가 출력됩니다. 이것이 바로 srand() 함수가 필요한 이유입니다.
srand()란 무엇인가?
srand() 함수 역시 C++ STL에 내장된 함수로, <cstdlib> 헤더 파일에 정의되어 있습니다. srand()는 난수 생성기를 초기화하는 데 사용됩니다. 이 함수는 의사 난수(pseudo-random integer) 시퀀스 생성의 시작점을 지정하며, 인자로 전달된 값이 의사 난수를 생성하기 위한 시드로 사용됩니다. srand()에 서로 다른 시드 값을 사용하면, rand()와 마찬가지로 의사 난수 생성기가 서로 다른 결과 시퀀스를 생성하리라 기대할 수 있습니다.
문법
int srand(unsigned int seed);
매개변수
이 함수는 다음 매개변수를 받습니다.
seed − 의사 난수 생성기가 시드로 사용하는 정수 값입니다.
반환값
이 함수는 생성된 의사 난수를 반환합니다.
입력
srand(time(0)); rand();
출력
1804289383
예제
srand()
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void){
srand(time(0));
printf("Randomly generated numbers are: ");
for(int i = 0; i<5; i++)
printf(" %d ", rand());
return 0;
}
출력 결과
이 코드를 첫 번째로 실행했을 때의 출력은 다음과 같습니다.
Randomly generated numbers are: 382366186 1045528146 1291469435 515349891 931606430
두 번째로 실행했을 때의 출력은 다음과 같습니다.
Randomly generated numbers are: 1410939666 214525217 875042802 1560673843 782892338
time(0)을 시드로 사용하면 프로그램이 실행되는 시각이 매번 달라지므로, 실행할 때마다 서로 다른 난수 시퀀스를 얻을 수 있습니다.