문제 분류 수업 진도 대회 채점현황 순위 질문게시판
게임
스도쿠 타이핑 리듬 타자게임 타이핑 테트리스 타이핑 인베이더 타이핑 지뢰찾기 8192 공룡게임 타이핑 플래피버드 랭킹
로그인

5025 : 코인 가차

•시간제한: 2.000 S •메모리제한: 256 MB •제출: 2 •통과: 2 •만든사람: suakii

5025 : 코인 가차

시간 2.000s · 메모리 256MB · 제출 2 · 정답 2

문제 설명

$N$종류의 코인 중 하나가 같은 확률로 나오는 뽑기 기계가 있습니다.
모든 종류의 코인을 적어도 하나씩 모을 때까지 필요한 총 금액의 기댓값을 구하는 프로그램을 작성하십시오.
(단, 코인은 한 번 뽑을 때마다 $1$원이 든다고 가정합니다.)

[1. 기댓값(Expected Value)의 수학적 정의]
확률변수 $X$가 취할 수 있는 값들을 $x_k$, 그 값이 나타날 확률을 $p_k$라고 할 때, 기댓값 $E(X)$는 각 결과값에 해당 확률을 곱한 것들의 총합으로 정의됩니다.
$$\displaystyle E(X) = \sum_{k} \Big( x_k \times p_k \Big)$$

[2. 새로운 코인을 뽑기 위해 필요한 횟수의 기댓값]
이미 $k$종류($0 \le k < N$)의 서로 다른 코인을 모았다고 할 때, 아직 모으지 못한 새로운 종류의 코인은 $N - k$종류가 남아 있습니다.
다음 번 뽑기에서 아직 없는 새로운 코인이 나올 확률은 $\displaystyle \frac{N - k}{N}$입니다.
따라서 다음 새로운 코인을 뽑을 때까지 필요한 뽑기 횟수의 기댓값은 성공 확률의 역수와 같습니다.
$$\displaystyle \frac{1}{\frac{N - k}{N}} = \frac{N}{N - k}$$
[3. 모든 종류를 모으기 위한 총 금액의 기댓값 공식]
기댓값의 선형성에 의해, $0$종류에서 시작하여 $N$종류를 모두 모을 때까지 필요한 총 횟수의 기댓값은 각 단계에서 새로운 코인을 얻기까지 필요한 횟수들의 총합과 같습니다.
(한 번 뽑을 때 $1$원이 들므로, 총 횟수의 기댓값이 곧 필요한 총 금액의 기댓값입니다.)
$$\displaystyle \text{총 금액 기댓값} = \sum_{k=0}^{N-1} \frac{N}{N - k} = N \left( \frac{1}{N} + \frac{1}{N-1} + \dots + \frac{1}{2} + \frac{1}{1} \right) = N \sum_{i=1}^{N} \frac{1}{i}$$
따라서 $1$부터 $N$까지 $\displaystyle \frac{1}{i}$을 누적한 조화수(Harmonic number)에 $N$을 곱하면 모든 종류를 모으기 위한 총 금액의 기댓값이 됩니다.

[제약 조건]
• $2 \le N \le 1\,000\,000$
• $N$은 정수입니다.

입력 설명

첫째 줄에 코인의 종류 수 $N$이 주어집니다.

출력 설명

기댓값을 출력하십시오.
정답과의 절대 오차 또는 상대 오차가 $10^{-6}$ 이하라면 정답으로 인정합니다.
(단, 출력값을 $A$, 실제 정답을 $B$라 할 때 절대 오차는 $|A - B|$, 상대 오차는 $\frac{|A - B|}{|B|}$로 정의합니다.)

입력 예시
COPY
복사되었습니다!

3

출력 예시
COPY
복사되었습니다!

5.500000000000

출처/분류

NOTICE  —  BFStudy OJ 정보샘
애들아, 문제 많이 풀고 게임 잠깐 하는거지?
— 정보샘