난수 2

[C++] 중복 처리 (2)

본문 중복 인덱스 처리 #include #include #include #include int main() { unsigned seed = std::chrono::system_clock::now().time_since_epoch().count(); std::mt19937 generator(seed); std::vector word_pairs = { {"game", "게임"}, {"start", "시작하다"}, {"smart", "똑똑한"}, {"string", "문자열"}, {"combination", "조합"}, {"pair", "쌍"} }; 다음과 같이 벡터에 단어와 그 정의가 저장되어 있고, 여기서 무작위로 5개의 문제를 낸다고 해보자. 이때 중복된 문제가 없으려면 어떻게 해야 할까? std::sh..

Language/C++ 2023.09.08

[C++] 난수 생성

랜덤 함수 개요 컴퓨터는 명령어와 알고리즘을 기반으로 동작하는 결정론적인 기계다. 이런 특성 때문에, 컴퓨터는 완전히 무작위적인 값을 자체적으로 생성하는 것이 기본적으로 어렵다. 그렇지만, 멀티코어 컴퓨터의 경우 각 코어 간의 타이밍 차이나 상호 작용으로 인한 비결정성을 활용하여 어느 정도의 무작위성을 가진 값을 생성할 수 있다. 그렇지만 이렇게 생성된 값은 완전한 엔트로피를 기반으로 하는 '진정한' 난수에 비해 일정한 제한이 있을 수 있다. C++에서는 여러 방법으로 이러한 무작위 값을 생성할 수 있다. 대표적인 방법으로는 C-style의 rand() 함수, C++11 이후에 도입된 라이브러리, 그리고 하드웨어 기반의 난수 생성기를 사용하는 std::random_device 클래스 등이 있다. 이 글에..

Language/C++ 2023.09.04