프로그램을 배우며 여러 실습등을 거치다 보면,
만들고자 하는 프로그램에 확률이 필요하거나, 무작위로 무언가 할 필요가 있을 때가 있다.
이러한 알고리즘을 구현하고자 할 때, 임의로 조작하는 것도 가능하지만, 보다 간편하고 확실한 난수를 발생시킬 수 있도록
도와주는 전처리기가 있다
#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 |