별꽃의 세레나데 (Easy)
난이도
Gold 5
인증
문제
겨울 나라의 왕은 꽃을 좋아하는 왕비를 위해 가장 아름다운 꽃들을 모아 화관을 만들기로 했다. 왕비가 좋아하는 꽃들은 특별해서 마법의 씨앗을 심은 뒤 별빛을 받아야 피어난다. 마법의 씨앗에서 피어날 수 있는 꽃들의 종류는 $N$가지이며, 각 종류의 꽃들이 피어날 확률은 동일하다. 씨앗에서 꽃이 피어날 확률은 다른 씨앗에 영향을 받지 않는다. 화관을 만들기 위해서는 모든 종류의 꽃들이 최소 한 송이씩 필요하다. 화관이 만들어질 때까지 씨앗에서 꽃을 한 송이씩 피운다면, 필요한 씨앗 개수의 기댓값은 얼마일까?
입력
첫 줄에 꽃들의 종류의 수를 의미하는 정수 $N$ ($1 \leq N \leq 1000$) 이 주어진다.
출력
화관을 만들기 위해서 필요한 씨앗 개수의 기댓값을 출력한다. 정답과의 절대 오차/상대 오차 중 하나가 $10^{-4}$ 이하라면 정답으로 인정된다. 구체적으로, 제출한 답이 $a$이고 정답이 $b$일 때 $\frac{|a - b|}{\max(1, |b|)} \leq 10^{-4}$이면 정답으로 인정된다.
예제 입력
1
예제 출력
1.0000000000000000000
해설 및 후기
쿠폰과 매우 유사한 문제이다. 그러나 이는 기약분수 꼴로 처리하는 것이 아닐 뿐더러, N의 값이 매우 커질 수 있다. 때문에 gcd를 이용하지 않고, 더한 분자값을 분모값으로 단순히 나누어 이를 해결할 수 있었다.
제출 코드
from math import gcd
def printAns(n):
d = 1
for i in range(2,n+1):
d *= i
t = 0
for i in range(1,n+1):
t += d//i
t *= n
c = gcd(t,d)
d = d//c
t = t//c
print(t/d)
n = int(input())
printAns(n)