0Pricing
C++ Academy · 강의

분포

무작위 출력 형태 지정하기

분포은(는) 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 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 난수 엔진
  2. 분포
  3. 올바른 시드 설정
  4. 실용 예제
← C++ Academy(으)로 돌아가기