전공수업 [객체지향프로그래밍]에서의 공부내용을 기록합니다!🐯
동전을 던져서 앞면이 나오면 + $1
동전을 던져서 뒷면이 나오면 - $1초기자본(stake)과 목표액(goal)이 주어질 때, 목표액에 도달하면 이기고, 돈을 모두 잃으면 진다
게임을 T번 반복하여 승률을 출력하는데, T와 초기자본, 목표액은 입력으로 주어진다..
게임에서 이길 확률을 계산해보자.
cstdlib 헤더파일을 선언한다.
cstdlib 헤더파일 속 난수 생성 함수인 srand()를 사용하여 난수 생성을 위한
초기값을 설정한다.
변수 T, stake, goal을 차례대로 입력받는다.
for t = 0 to T-1 do
cash = stake
while cash > 0 && cash < goal
if rand() % 2 == 0 then cash++
else cash--
endwhile
if cash == goal then
wins++
endif
endfor
승률을 출력한다.
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main() {
int stake, goal, T;
int wins = 0;
srand((unsigned int) time(NULL)); // 난수생성기
cin >> stake >> goal >> T; // 초기자본, 목표금액, 횟수를 입력받음
for (int t = 0; t < T; t++) {
int cash = stake;
while (cash > 0 && cash < goal) { // 파산하지 않고, 목표금액보다
if (rand() % 2 == 0) cash++; // 현재 금액이 적을 때
else cash--;
}
if (cash == goal) // 저본이 목표금액과 같아진다면, 승리
wins++;
}
cout << 100*wins/(double)T << endl;
return 0;
}
Random Number Generator (난수생성기) : 랜덤 숫자를 출력해주는 라이브러리 함수
사실, 컴퓨터는 랜덤 숫자를 출력하는 것은 말이 안된다. 컴퓨터는 기계이므로 물리적인 동작을 하지 않는다. 그리고 같은 조건에서는 모두 같은 결과만 나오므로 deterministic(결정론적인)이라고 한다. 엄밀한 의미에서는 위와 같지만, pseudo random number generator을 사용하여 랜덤 숫자를 출력할 수 있다.
가짜로 랜덤 숫자를 출력한다고 하여 pseudo random number generator라고 한다. 이를 사용하기 위해서는 맨 처음에 seed라는 값을 주어야 한다. 이때 주는 정수값이 같으면 출력되는 값은 항상 같게 된다. 그러므로 매번 다른 수인 seed를 주기 위해 time(NULL)
을 사용한다.
srand((unsigned int) time(NULL))
time(NULL)
은 현재 시각을 의미하고, 항상 시간은 다를 수 밖에 없으니 같은 값이 출력되는 것을 방지할 수 있다.