본문 바로가기
  • 실행력이 모든걸 결정한다
유용한 정보, 링크

3줄컷! 초 간단 난수(Random) 생성기

by 김코더 김주역 2020. 10. 1.
반응형

이번 포스팅에서 소개할 것은 random_device 라는 난수 생성 방식이다.

<random> 헤더에 있는 random_device는 시드를 하드웨어의 리소스로 만든다.

하드웨어의 리소스라고 하면 노이즈, 마우스 움직임 등이 있다.

 

헤더파일 선언, 객체 선언, 출력 단 3줄만이 필요하다.

유의할 점이 있다면 출력 값은 int형의 범위를 초과할 수도 있다는 점이다.

아래 사진을 보면 28억이 출력되는 모습을 볼 수 있다.

그러나, 범위는 프로그래머가 %와 +/- 를 활용하여 쉽게 조절할 수 있다.

 

#include <iostream>
#include <random>
using namespace std;

int main() {
    random_device rd;
    cout << rd();
}

 

 

srand, time 같은걸 쓰는 방법보다 훨씬 간단하지 않은가?

 

이를 응용해서 간단한 로또 번호 생성기를 만들어보았다.

 

#include <iostream>
#include <vector>
#include <random>
#include <algorithm>
using namespace std;

vector<int> lotto;
bool selected[46]; //중복 방지
int main() {
    random_device rd;
    int ran;
    
    while (lotto.size()!=6) {
    	ran = rd() % 45 + 1; // 1≤ran≤45;
    	if(!selected[ran]) {
            lotto.push_back(ran);
    	    selected[ran] = true;
    	}
    }
   
    sort(lotto.begin(), lotto.end()); //오름차순 정렬
    
    for (int i = 0; i < 6; i++) {
    	cout << lotto[i] << " "; //출력
    }
}

 

반응형

댓글