실용 예제
주사위, 셔플 및 샘플링
실용 예제은(는) CoddyKit의 무료 C++ Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 C++ Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. C++ Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
주사위 굴리기
6면체 주사위는 seed가 설정된 엔진이 값을 제공하는 uniform_int_distribution(1, 6)입니다.
#include <iostream>
#include <random>
int main() {
std::mt19937 gen(2026);
std::uniform_int_distribution<int> die(1, 6);
for (int i = 0; i < 5; ++i) std::cout << die(gen) << ' ';
std::cout << '\n';
return 0;
}주사위 두 개의 합
주사위 두 개를 굴려 더하면 2에서 12까지의 익숙한 범위가 만들어지며, 7이 가장 자주 나옵니다.
#include <iostream>
#include <random>
int main() {
std::mt19937 gen(1);
std::uniform_int_distribution<int> die(1, 6);
int total = die(gen) + die(gen);
std::cout << "two dice sum: " << total << '\n';
return 0;
}동전 던지기
공정한 동전은 bernoulli_distribution(0.5)입니다. 여러 번 던진 뒤 앞면이 나온 횟수를 세어 보세요.
#include <iostream>
#include <random>
int main() {
std::mt19937 gen(7);
std::bernoulli_distribution coin(0.5);
int heads = 0;
for (int i = 0; i < 100; ++i) if (coin(gen)) ++heads;
std::cout << heads << " heads out of 100\n";
return 0;
}카드 덱 섞기
std::shuffle은 엔진을 사용하여 범위의 요소 순서를 무작위로 바꾸며, 제거된 random_shuffle을 현대적으로 대체합니다.
#include <iostream>
#include <random>
#include <algorithm>
#include <vector>
int main() {
std::vector<int> cards{1, 2, 3, 4, 5};
std::mt19937 gen(3);
std::shuffle(cards.begin(), cards.end(), gen);
for (int c : cards) std::cout << c << ' ';
std::cout << '\n';
return 0;
}무작위 승자 선택
범위 안에서 무작위 인덱스를 생성하여 요소 하나를 선택합니다.
#include <iostream>
#include <random>
#include <vector>
#include <string>
int main() {
std::vector<std::string> names{"Ann", "Ben", "Cara", "Dan"};
std::mt19937 gen(9);
std::uniform_int_distribution<int> pick(0, names.size() - 1);
std::cout << "winner: " << names[pick(gen)] << '\n';
return 0;
}비복원 추출
std::sample은 범위에서 서로 다른 k개의 요소를 추출하므로, 복권 추첨이나 퀴즈 항목 선택에 적합합니다.
#include <iostream>
#include <random>
#include <algorithm>
#include <vector>
int main() {
std::vector<int> pool{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
std::vector<int> picked;
std::mt19937 gen(4);
std::sample(pool.begin(), pool.end(), std::back_inserter(picked), 3, gen);
for (int x : picked) std::cout << x << ' ';
std::cout << '\n';
return 0;
}무작위 비밀번호 문자
균등 분포를 사용하여 문자 집합의 인덱스를 선택하면 무작위 문자열을 만들 수 있습니다.
#include <iostream>
#include <random>
#include <string>
int main() {
const std::string chars = "abcdefghijklmnopqrstuvwxyz";
std::mt19937 gen(13);
std::uniform_int_distribution<int> pick(0, chars.size() - 1);
std::string pw;
for (int i = 0; i < 8; ++i) pw += chars[pick(gen)];
std::cout << pw << '\n';
return 0;
}가중치에 따른 선택
std::discrete_distribution은 지정된 가중치에 따라 인덱스를 선택하므로, 자주 발생하는 결과가 더 많이 나타납니다.
#include <iostream>
#include <random>
int main() {
std::mt19937 gen(6);
std::discrete_distribution<int> d{10, 1, 1}; // index 0 is heaviest
int counts[3] = {0};
for (int i = 0; i < 120; ++i) counts[d(gen)]++;
std::cout << counts[0] << ' ' << counts[1] << ' ' << counts[2] << '\n';
return 0;
}무작위 이동 시뮬레이션
무작위로 왼쪽이나 오른쪽으로 이동하면서 최종 position을 추적하는 간단한 확률적 시뮬레이션입니다.
#include <iostream>
#include <random>
int main() {
std::mt19937 gen(2);
std::bernoulli_distribution step(0.5);
int pos = 0;
for (int i = 0; i < 1000; ++i) pos += step(gen) ? 1 : -1;
std::cout << "final position: " << pos << '\n';
return 0;
}6이 나올 때까지 주사위 굴리기
사건이 발생할 때까지 반복하여 시행을 모델링합니다. 여기서는 6이 나올 때까지 필요한 주사위 굴리기 횟수를 셉니다.
#include <iostream>
#include <random>
int main() {
std::mt19937 gen(15);
std::uniform_int_distribution<int> die(1, 6);
int rolls = 0;
while (die(gen) != 6) ++rolls;
std::cout << "extra rolls before a six: " << rolls << '\n';
return 0;
}테스트 데이터 생성
분포를 사용하면 알고리즘을 테스트할 무작위 값으로 벡터를 빠르게 채울 수 있습니다.
#include <iostream>
#include <random>
#include <vector>
int main() {
std::mt19937 gen(21);
std::uniform_int_distribution<int> d(1, 50);
std::vector<int> data(5);
for (int& v : data) v = d(gen);
for (int v : data) std::cout << v << ' ';
std::cout << '\n';
return 0;
}빠른 확인
실제 무작위성에 대한 이해도를 확인해 보세요.
복습
<random>을 실제로 적용해 보았습니다.
- 균등 분포와 베르누이 분포를 사용한 주사위, 동전, 승자 선택
- 순서를 바꾸는
std::shuffle과 비복원 추출을 수행하는std::sample - 가중치에 따른 선택을 위한
discrete_distribution과 무작위 이동 같은 시뮬레이션
이제 C++의 연관 컨테이너, 해싱, 파일 입출력, 무작위성을 다룰 수 있는 완전한 도구 모음을 갖추었습니다.
자주 묻는 질문
“실용 예제” 강의는 무료인가요?
네 — “실용 예제” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 C++ Academy 강의 전체를 잠금 해제할 수 있습니다. C++ Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“실용 예제”에서 뭘 배우나요?
주사위, 셔플 및 샘플링 브라우저에서 직접 실행하는 실습 코드로 C++ Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
C++ Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 C++ Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.
“실용 예제” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 C++ Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 C++ Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.