난수의 확률 & if문의 활용

Jaemyeong Lee·2024년 8월 17일
0

어소트락2017

목록 보기
7/20

이 강의는 C++에서 난수 생성 및 이를 활용한 확률 계산과 if 문을 사용한 조건 처리를 다루고 있습니다. 주석을 포함하여 코드의 각 줄을 분석하고, 관련 개념을 자세히 정리하겠습니다. 이 내용을 블로그에 정리하여 복습할 수 있도록 하겠습니다.


1. 난수 생성 및 초기화

// 난수 발생
srand((unsigned int)time(0));
  • 난수 초기화: srand() 함수는 난수 생성기를 초기화하는 함수입니다. 여기서는 현재 시간을 seed 값으로 사용하여 매번 다른 난수가 생성되도록 합니다.
    • (unsigned int)time(0): time(0)은 현재 시간을 초 단위로 반환하며, 이를 unsigned int로 캐스팅하여 srand()에 전달합니다. 이로 인해 매번 프로그램을 실행할 때마다 다른 난수가 생성됩니다.
cout << rand() << endl;
cout << rand() << endl;
cout << rand() << endl;
  • 난수 생성: rand() 함수는 0부터 RAND_MAX(보통 32767) 사이의 난수를 생성합니다. 여기서는 세 번의 난수를 출력합니다. 이때 출력되는 난수는 srand()로 초기화된 시드에 따라 달라집니다.

2. 특정 범위의 난수 생성

// 100 부터 200 사이에 난수 생성
cout << (rand() % 100 + 100) << endl;
  • 특정 범위의 난수 생성: (rand() % 100 + 100)은 100부터 199 사이의 난수를 생성합니다.
    • rand() % 100은 0부터 99 사이의 난수를 생성하며, 여기에 100을 더하여 100부터 199 사이의 난수를 얻을 수 있습니다.
// 소수점 두자리 까지 난수 생성
cout << (rand() % 100000 / 100.f) << endl;
  • 소수점 두 자리의 난수 생성: (rand() % 100000 / 100.f)은 0.00부터 999.99 사이의 난수를 생성합니다.
    • rand() % 100000은 0부터 99999까지의 정수를 생성하며, 이를 100으로 나누어 소수점 두 자리까지 표현합니다.

3. 강화 확률 계산 및 조건 처리

int iUpgrade = 0;
// 강화 확률을 구한다.

float fPercent = rand() % 10000 / 100.f;
float fNumber;
  • 변수 초기화:
    • iUpgrade는 현재 아이템의 강화 단계를 나타냅니다.
    • fPercent는 0.00부터 99.99까지의 난수를 생성하여 강화 성공 확률을 계산하는 데 사용됩니다.

4. 강화 성공 여부 판단

// 강화 확률 : 업그레이드가 0 ~ 3 : 100%, 4~6 : 40%, 7~9 : 10%, 10 ~ 13 : 1%, 14 ~ 15 : 0.01%

cout << "Upgrade : " << iUpgrade << endl;
cout << "Percent : " << fPercent << endl;
  • 출력:
    • 현재 iUpgrade(강화 단계)와 fPercent(난수로 계산된 확률)을 출력합니다.
if (iUpgrade <= 3)
{
	cout << "강화 성공" << endl;
}
else if(4 <= iUpgrade && iUpgrade <= 6)
{
	if (fPercent < 40.f)
	{
		cout << "강화 성공" << endl;
	}
	else
	{
		cout << "강화 실패" << endl;
	}
}
else if (7 <= iUpgrade && iUpgrade <= 9)
{
	if (fPercent < 10.f)
	{
		cout << "강화 성공" << endl;
	}
	else
	{
		cout << "강화 실패" << endl;
	}
}
else if (10 <= iUpgrade && iUpgrade <= 13)
{
	if (fPercent < 1.f)
	{
		cout << "강화 성공" << endl;
	}
	else
	{
		cout << "강화 실패" << endl;
	}
}
else if (14 <= iUpgrade && iUpgrade <= 15)
{
	if (fPercent < 0.01f)
	{
		cout << "강화 성공" << endl;
	}
	else
	{
		cout << "강화 실패" << endl;
	}
}
  • 조건문에 따른 강화 성공/실패 판정:
    • iUpgrade의 값에 따라 다른 확률로 강화 성공 여부를 결정합니다.
    • 강화 단계에 따른 확률은 아래와 같습니다:
      • 0 <= iUpgrade <= 3: 100% 성공.
      • 4 <= iUpgrade <= 6: 40% 성공. (fPercent < 40.f)
      • 7 <= iUpgrade <= 9: 10% 성공. (fPercent < 10.f)
      • 10 <= iUpgrade <= 13: 1% 성공. (fPercent < 1.f)
      • 14 <= iUpgrade <= 15: 0.01% 성공. (fPercent < 0.01f)
    • 각 단계별로 fPercent가 해당하는 확률보다 작으면 강화에 성공하고, 크면 강화에 실패합니다.

5. 요약 및 결론

이 강의에서는 C++에서 난수를 생성하고, 이를 활용하여 강화 확률을 계산하는 방법을 학습했습니다. 주요 내용은 다음과 같습니다:

  • 난수 생성: srand()로 난수 생성기를 초기화한 후, rand()를 사용하여 난수를 생성할 수 있습니다.
  • 특정 범위의 난수 생성: rand()와 모듈러 연산(%)을 활용하여 특정 범위의 난수를 생성할 수 있으며, 소수점 두 자리의 난수도 생성 가능합니다.
  • 강화 확률 계산: 난수로 계산된 확률(fPercent)을 활용하여 특정 강화 단계에서 성공 여부를 판단합니다.
  • 조건문 활용: if, else if, else 문을 사용하여 강화 단계에 따른 성공 확률을 다르게 설정하고, 이를 기반으로 성공 여부를 결정합니다.

이 내용을 바탕으로 난수 생성과 확률 계산, 그리고 조건문 활용 방법을 복습할 수 있도록 블로그에 정리해보세요!

profile
李家네_공부방

0개의 댓글