Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++ 반복문에서 매번 다른 난수를 생성하는 방법

C++에서 반복문을 실행할 때마다 서로 다른 난수를 생성하는 방법을 알아보겠습니다. 이 글에서는 0부터 특정 값까지의 범위에서 난수를 생성하며, 예제 프로그램에서는 최댓값을 100으로 설정했습니다.

srand() 함수로 난수 시드 설정하기

매번 다른 난수를 얻으려면 srand() 함수를 사용해야 합니다. 이 함수는 C++ 표준 라이브러리에 포함되어 있으며, rand() 함수가 사용하는 의사 난수 생성기의 시작점(시드)을 초기화하는 역할을 합니다.

srand() 함수의 선언 형태는 다음과 같습니다.

void srand(unsigned int seed)

이 함수는 seed라는 매개변수를 하나 받습니다. 시드는 의사 난수 생성 알고리즘이 난수열을 만들기 위해 참조하는 정수값입니다. 같은 시드를 사용하면 항상 동일한 난수열이 생성되기 때문에, 실행할 때마다 다른 결과를 얻으려면 시드 값을 계속 바꿔주어야 합니다. 이 함수는 별도의 반환값이 없습니다.

rand() 함수와 모듈로 연산자 활용

실제 난수를 얻으려면 rand() 메서드를 호출합니다. rand()는 기본적으로 매우 큰 범위의 정수를 반환하므로, 0부터 max까지의 범위로 제한하려면 나머지 연산자(%)를 사용합니다. 예를 들어 rand() % 100은 항상 0~99 사이의 값을 반환합니다.

시드 값으로는 time(0) 함수의 반환값을 srand()에 전달합니다. time(0)은 현재 시각을 초 단위로 반환하기 때문에, 프로그램이 실행되는 순간마다 시드가 달라지고 그 결과 매번 새로운 난수열을 얻을 수 있습니다.

전체 예제 코드

#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
main() {
   int max;
   max = 100; // 난수 생성 상한값을 100으로 설정
   srand(time(0));
   for(int i = 0; i<10; i++) { // 난수 10개 생성
      cout << "생성된 난수: "<<rand()%max << endl;
   }
}

실행 결과

생성된 난수: 6
생성된 난수: 82
생성된 난수: 51
생성된 난수: 46
생성된 난수: 97
생성된 난수: 60
생성된 난수: 20
생성된 난수: 2
생성된 난수: 55
생성된 난수: 91

정리

핵심 포인트를 정리하면 다음과 같습니다.

- srand(time(0)): 현재 시각을 시드로 사용하여 프로그램 실행마다 다른 난수열을 생성합니다.
- rand() % max: 모듈로 연산으로 난수 범위를 0부터 max-1까지로 제한합니다.
- srand()를 호출하지 않으면 rand()는 기본 시드를 사용하기 때문에 프로그램을 여러 번 실행해도 항상 같은 난수가 출력됩니다.