1. rand() 함수
- rand() 함수는 0 ~ 32767 사이의 랜덤 정수를 반환한다.
- 하지만 프로그램을 여러 번 재실행시켜도 결과가 동일하게 출력된다.
2. srand() 함수
- 위처럼 계속 같은 값이 나오는 이유는 rand() 함수의 경우 특정 seed값을 기준으로 특정 공식을 이용해 난수를 생성하므로, 시드값이 같다면 계속 동일한 결과가 나올 수 밖에 없는 것이다.
- 때문에 시드값을 변경해주어야 기존과 다른 값을 생성할 수 있는데, 이 시드값을 변경해주는 함수가 바로 srand()이다.
srand(2);
cout << rand() << endl;
cout << rand() << endl;
cout << rand() << endl;
출력 결과 :
45
29216
24198
- 하지만 위처럼 srand()의 인수로 고정값을 전달해준다면 결국 또 항상 같은 값이 출력된다.
때문에 이를 해결하기 위해 srand()의 인수로 항상 변화하는 값을 넣어주어야 한다.
3. time() 함수
- time(NULL)은 UCT 기준 1970년 1월 1일 0시 0분 0초 부터 경과된 시간을 초 단위로 반환한다.
- 때문에 매초마다 변화하므로 srand(time(NULL))과 같이 사용해 실행할 때마다 다른 시드값으로 초기화한다면 rand()는 매번 다른 값을 반환하게 된다.
srand(time(NULL));
cout << rand() << endl;
cout << rand() << endl;
cout << rand() << endl;
4. 난수의 범위 제한하기
- 만약 반환되는 난수의 범위를 조정하고 싶으면 '%'(나머지) 연산자를 사용하면 된다.
- rand()가 반환한 값을 원하는 숫자로 % 연산하면 0 ~ (해당 숫자 - 1) 범위의 난수를 만들 수 있다.
srand(time(NULL));
cout << rand() % 3 << endl;
cout << rand() % 3 << endl;
cout << rand() % 3 << endl;
cout << rand() % 3 << endl;