C++

[C++] 난수 생성 및 Shuffle

건전한 건전지 2022. 11. 17. 18:04
728x90
반응형
#include <iostream>
#include <random>
#include <functional>
using namespace std;

// 랜덤 숫자 생성을 위한 함수
void genRandomNum(vector <int> &vc) {

	// 난수 엔진 mt19937, 괄호 안은 시드 값 지정
	mt19937 engine((unsigned int)time(NULL));
    
    // a~b까지 균등한 분포를 가진 숫자를 생성함
    // 실수 타입은 uniform_real_distribution 사용
	uniform_int_distribution <int> dist(0, 95);
	auto gener = bind(dist, engine);

	// 10개 생성 후 Vector에 넣기
	for (int i = 0; i < 10; i++)
		vc.push_back(gener());
}

// 숫자를 랜덤으로 섞어주는 함수
void shuffleNum(vector <int>& vc) {
	// time은 같은 시간에 실행되면 항상 똑같은 난수를 발생시키므로 random_device를 통해 예측 불가능한 난수 생성 가능
    // 범위 : 0 ~ 2^32-1
	random_device rd;
    
    // 인수 rd
	mt19937 g(rd());
	shuffle(vc.begin(), vc.end(), g);
}

int main() {
	vector <int> vc;

	genRandomNum(vc);

	cout << "Origin : ";
	for (auto i : vc)
		cout << i << " ";

	shuffleNum(vc);

	cout << "\nAfter : ";
	for (auto i : vc)
		cout << i << " ";
}

 

난수 엔진 mt19937, 괄호 안은 시드 값 지정

mt19937 engine((unsigned int)time(NULL));

 

a~b까지 균등한 분포를 가진 숫자를 생성함
실수 형은 uniform_real_distribution 사용

uniform_int_distribution  dist(a, b);

time은 같은 시간에 실행되면 항상 똑같은 난수를 발생시키므로 random_device를 통해 예측 불가능한 난수 생성 가능
범위 : 0 ~ 2^32-1, 인수를 rd로 줌

random_device rd;
mt19937 g(rd());

Origin : 0 ~ 95 난수 생성, After : Random Shuffle

 

728x90
반응형