분포
무작위 출력 형태 지정하기
분포은(는) CoddyKit의 무료 C++ Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 C++ Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. C++ Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
분포가 하는 일
분포는 엔진의 원시 비트를 원하는 형태와 범위의 값으로 매핑합니다. 엔진을 인수로 전달해 호출합니다.
#include <iostream>
#include <random>
int main() {
std::mt19937 gen(1);
std::uniform_int_distribution<int> dist(1, 100);
std::cout << "value: " << dist(gen) << '\n';
return 0;
}균등 정수 분포
std::uniform_int_distribution<int>(a, b)는 [a, b]의 양 끝을 포함하는 범위에서 각 정수를 같은 확률로 반환합니다.
#include <iostream>
#include <random>
int main() {
std::mt19937 gen(5);
std::uniform_int_distribution<int> die(1, 6);
for (int i = 0; i < 5; ++i) std::cout << die(gen) << ' ';
std::cout << '\n';
return 0;
}균등 실수 분포
std::uniform_real_distribution<double>(a, b)는 [a, b) 범위의 부동 소수점 값을 반환하며, 확률을 표현할 때 유용합니다.
#include <iostream>
#include <random>
#include <iomanip>
int main() {
std::mt19937 gen(3);
std::uniform_real_distribution<double> dist(0.0, 1.0);
std::cout << std::fixed << std::setprecision(3) << dist(gen) << '\n';
return 0;
}베르누이 분포
std::bernoulli_distribution(p)는 확률 p로 true를 반환하여, 편향된 동전 던지기를 모델링합니다.
#include <iostream>
#include <random>
int main() {
std::mt19937 gen(8);
std::bernoulli_distribution coin(0.5);
for (int i = 0; i < 5; ++i) std::cout << (coin(gen) ? 'H' : 'T');
std::cout << '\n';
return 0;
}정규 분포
std::normal_distribution<double>(mean, stddev)는 평균을 중심으로 모이는 종 모양의 곡선을 생성합니다.
#include <iostream>
#include <random>
#include <iomanip>
int main() {
std::mt19937 gen(11);
std::normal_distribution<double> dist(100.0, 15.0);
std::cout << std::fixed << std::setprecision(1) << dist(gen) << '\n';
return 0;
}분포 재사용
분포는 반복해서 호출해도 부담이 적습니다. 하나를 만든 다음 같은 엔진과 함께 반복문에서 호출하십시오.
#include <iostream>
#include <random>
int main() {
std::mt19937 gen(20);
std::uniform_int_distribution<int> d(1, 3);
int counts[4] = {0};
for (int i = 0; i < 12; ++i) counts[d(gen)]++;
std::cout << counts[1] << ' ' << counts[2] << ' ' << counts[3] << '\n';
return 0;
}푸아송 분포
std::poisson_distribution<int>(mean)는 분당 도착 횟수처럼 드문 사건의 발생 횟수를 모델링합니다.
#include <iostream>
#include <random>
int main() {
std::mt19937 gen(30);
std::poisson_distribution<int> dist(4.0);
for (int i = 0; i < 5; ++i) std::cout << dist(gen) << ' ';
std::cout << '\n';
return 0;
}분포 매개변수
a(), b(), mean(), stddev()와 같은 접근자를 사용하여 분포의 매개변수를 조회할 수 있습니다.
#include <iostream>
#include <random>
int main() {
std::uniform_int_distribution<int> d(10, 50);
std::cout << "range: " << d.a() << " to " << d.b() << '\n';
return 0;
}분포 상태 초기화
일부 분포(예: 정규 분포)는 내부 상태를 캐시합니다. reset()은 이 상태를 지워 다음 값이 엔진에만 의존하도록 합니다.
#include <iostream>
#include <random>
int main() {
std::mt19937 gen(40);
std::normal_distribution<double> dist(0.0, 1.0);
dist(gen);
dist.reset();
std::cout << "distribution state reset\n";
return 0;
}무작위 요소 선택
무작위 배열 인덱스를 선택하려면 0부터 size - 1까지 사용하는 균등 정수 분포 uniform_int_distribution을 사용합니다.
#include <iostream>
#include <random>
#include <string>
int main() {
std::string colors[] = {"red", "green", "blue"};
std::mt19937 gen(50);
std::uniform_int_distribution<int> pick(0, 2);
std::cout << colors[pick(gen)] << '\n';
return 0;
}파이 추정
분포는 몬테카를로 방법의 기반이 됩니다. 정사각형 안에서 무작위 점을 표본 추출하면 파이를 추정할 수 있습니다.
#include <iostream>
#include <random>
#include <iomanip>
int main() {
std::mt19937 gen(60);
std::uniform_real_distribution<double> u(0.0, 1.0);
int inside = 0, n = 10000;
for (int i = 0; i < n; ++i) {
double x = u(gen), y = u(gen);
if (x * x + y * y <= 1.0) ++inside;
}
std::cout << std::fixed << std::setprecision(2) << 4.0 * inside / n << '\n';
return 0;
}빠른 확인
분포 범위에 대한 이해도를 확인해 보세요.
복습
다음과 같은 분포를 배웠습니다.
- 엔진의 출력 형태를 정합니다:
uniform_int(양끝 포함),uniform_real([a,b)),bernoulli,normal,poisson - 예를 들어
dist(gen)처럼 엔진과 함께 호출하며, 반복문에서 재사용합니다. - 요소 선택과 몬테카를로 추정을 가능하게 합니다.
다음에는 엔진에 올바르게 seed를 설정합니다.
자주 묻는 질문
“분포” 강의는 무료인가요?
네 — “분포” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 C++ Academy 강의 전체를 잠금 해제할 수 있습니다. C++ Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“분포”에서 뭘 배우나요?
무작위 출력 형태 지정하기 브라우저에서 직접 실행하는 실습 코드로 C++ Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
C++ Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 C++ Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.
“분포” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 C++ Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 C++ Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.