본문 바로가기

C++ 일기

13. 난수 발생

프로그램을 배우며 여러 실습등을 거치다 보면,

만들고자 하는 프로그램에 확률이 필요하거나, 무작위로 무언가 할 필요가 있을 때가 있다.

이러한 알고리즘을 구현하고자 할 때, 임의로 조작하는 것도 가능하지만, 보다 간편하고 확실한 난수를 발생시킬 수 있도록

도와주는 전처리기가 있다

#include<iostream>
#include<random>

int main()
{
   srand(time(NULL));
   int a = 0;
   for(int i = 0, i < 5; i++)
   {
      a = rand() % 5;
      std::cout << a <<", ";
   }
   // 출력값 : 1, 4, 2, 1, 4 (실행시마다 다르게 출력)
}

항상 #include<iostream>만 적혀있던 코드의 맨 위에 #include<random>이라는 새로운 코드가 적혔다.

random 클래스는 무작위로 값을 출력하는 랜덤 함수 기능이 내재되어있다.

random을 include하는 전처리를 마치면, 해당 기능을 사용할 수 있다.

이는 iostream을 통하여 std 클래스에 있는 기능을 사용할 수 있게 되는 것과 동일하다.

 

메인 함수의 첫째 줄 부터 설명하자면,

srand(time(NULL))은 랜덤함수를 호출할 때 마다 다른 값을 불러오는 역할을 한다.

이 코드를 실행하지 않는다면 코드를 계속 실행해도 첫번째로 발생시킨 난수와 동일한 난수들이 나오게 된다.

이에 대한 예시는 모든 코드를 설명한 후에 다시 설명하도록 하겠다.

 

int a = rand() % 5는 난수의 범위를 지정하는 코드이다.

rand() %의 뒤에 숫자를 넣게되면, 난수는 0부터 시작하여 그 수보다 작은 정수중 하나를 무작위로 반환한다.

rand() %5는 0, 1, 2, 3, 4 중 하나를 무작위로 반환하는 것이다.

 

즉 위의 코드는 0부터 5사이의 숫자 중 하나를 저장하는 변수 a가 for문을 반복하며 5번 출력하는 코드이다.

만약 여기서 맨 위의 코드인 srand(time(NULL))을 적지 않았다면, 처음에 나온 값이 계속 반복해서 출력된다.

예를들어, 위의 주석에서 설명했던 것 처럼 1, 4, 2, 1, 4가 출력이 되었다면,

다음번에 실행하더라도 똑같이 1, 4, 2, 1, 4가 출력된다.

실행할 때 마다, 혹은 난수를 발생시킬 때 마다 다른 값을 얻고싶다면 srand(time(NULL));코드를 꼭 작성하도록 하자.

 

'C++ 일기' 카테고리의 다른 글

15. 포인터  (0) 2024.02.27
14. 사용자 정의 자료형 struct (구조체)  (2) 2024.02.27
12. 열거형 타입 enum  (0) 2024.02.26
11 - 2. 함수 오버로딩  (2) 2024.02.26
11 - 1. 함수  (2) 2024.02.26