헤이카카오
문제
일상을 바꾸는 단어, 헤이카카오는 카카오엔터프라이즈의 인공지능 플랫폼 Kakao i에 기반한 인공지능 비서 어플리케이션이다.
헤이카카오를 사용하면 음악 검색, 길 찾기, 외국어 번역 등 다양한 기능들을 말 한 마디로 이용할 수 있다.
2020 헤이카카오 연말 결산에 따르면, 헤이카카오가 "고마워", "안녕" 다음으로 많이 들은 말은 "끝말잇기 하자"였다고 한다.
방에서 핸드폰을 만지작거리던 이하도 심심풀이로 헤이카카오와 끝말잇기를 해 보기로 했다.
이하는 끝말잇기를 가볍게 여러 판 플레이하고 통계를 냈다.
그 결과 끝말잇기를 한 판 하는 데에는 a분이 걸리며, 현재 자신이 이길 확률은 d%라는 사실을 알게 되었다.
이하는 자신의 승률에 실망하고 이제 집중해서 플레이를 하기로 했다. 이하가 집중하면 끝말잇기에서 패배할 때마다 경험이 쌓여
이길 확률이 이전에 비해 k%만큼 오른다. 만약 이렇게 증가한 확률이 100%를 넘게 되면, 이하는 다음 판부터는 반드시 승리한다.
이하는 헤이카카오를 한 번 이길 때까지 끝말잇기를 하려고 한다. 이하가 끝말잇기를 진행하는 시간의 기댓값을 구해 보자.
입력
첫 번째 줄에는 세 개의 정수 a, d, k가 공백으로 구분되어 주어진다.(1<= a,d,k <= 100)
이는 끝말잇기 한 판에 a분이 걸리며 집중을 시작한 이하가 처음에 끝말잇기에서 이길 확률이 d%이고 패배할 때마다 승률이
이전에 비해 k%만큼 오름을 의미한다.
입력으로 주어지는 값은 모두 정수이다.
출력
이하가 이길 때까지 끝말잇기를 진행하는 시간의 기댓값을 분 단위로 출력한다.
절대오차 또는 상대오차가 10^(-6)이하면 정답으로 인정된다.
이 문제는 수학적으로 푸는 문제라 그렇게 어렵진 않았다.
다만 기댓값데 대한 정의에 대해 알아야 풀 수 있다.기댓값이란 각 사건이 벌어졌을 때의 이득과 그 사건이 벌어질 확률을 곱한 것을 전체 사건에 대해 합한 값이다.그렇게 때문에 예시의 1 50 50 같은 경우 1. 1*1*(1/2)2. 2*1*(1-1/2)*(1/2)*(1+1/2)3. 3*1*(1-1/2)*(1-(1/2)*(1+1/2))*((1/2)*(1+1/2))*(1+1/2)이렇게 하였다.100%가 넘는 시점까지만 구하면 되기 때문에 그때까지의 값을 저장한다.
import sys
a, d, k = map(int,sys.stdin.readline().split())
# 백분율로 변환
d = d/100
k = k/100
# 기댓값 저장
ex = 0
# 횟수 저장
n = 1
# 해당 시점 확률
per = d
# 이전 시점까지의 확률
toper = 1
while 1:
# 기댓값저장.
ex += a*n*toper*per
# 100%가 넘으면 정지
if per == 1:
break
# 이전까지의 확률이기때문에
# 해당 시점에서 실패 확률을 전까지의 확률과 곱
toper = toper*(1-per)
# 해당 시점 확률
per = per*(1+k)
# 횟수 증가
n += 1
# 100가 넘으면 100로 고정
if per > 1:
per = 1
print(ex)
'@@@ 알고리즘 > 백준 스터디' 카테고리의 다른 글
2258(정육점) - 해결 (0) | 2021.08.15 |
---|---|
15925(욱제는 정치쟁이야!!) - 해결 (0) | 2021.08.15 |
1182(부분 수열의 합) - 해결 (0) | 2021.08.12 |
2573(빙산) - 시간 초과 - 해결(PyPy3) (0) | 2021.08.11 |
2565(전깃줄) - 참고 (0) | 2021.08.11 |