(BOJ13258 복권 + 은행

Link copied to clipboard

문제 설명

Link copied to clipboard
  • 연속하여 확률을 계산하여 최종 기대값을 계산해야 한다.
  • 계산 방법만 이해한다면 어렵지 않게 접근하여 해결할 수 있다.

문제 풀이

Link copied to clipboard
def calc_next(now: float, win_prob: float, prize: int) -> float:
    win_money = now + prize
    return win_money * win_prob + now * (1 - win_prob)


if __name__ == "__main__":
    N = II()
    accounts = list(map(int, input().split()))
    J = II()
    C = II()
    for _ in range(C):
        total_accounts = sum(accounts)
        accounts = [calc_next(now, now / total_accounts, J) for now in accounts]
    print(accounts[0])
  • calc_next()함수로 각 기댓값을 구하는 것을 C번 반복하여 해결한다.