반응형
1. 문제
2. 코드
n, now = map(int, input().split())
l = list(map(float, input().split()))
bad = 0.0
good = 0.0
if now == 0:
good = 1.0
else:
bad = 1.0
g_g = l[0]
g_b = l[1]
b_g = l[2]
b_b = l[3]
for i in range(n):
prev_good = good
good = good * g_g + bad * b_g
bad = prev_good * g_b + bad * b_b
print(int(good * 1000))
print(int(bad * 1000))
3. 풀이
g_g, g_b, b_g, b_b은 각각 좋은날일 때 또 좋은날일 확률, 좋은날일 때 나쁜날일 확률, 싫은날인데 좋은날을 확률, 싫은날이고 또 싫을날을 확률을 의미한다.
그리고 n만큼, 즉 계산할 날 수 만큼 반복문을 돌려서.
good = good * g_g + bad * b_g
bad = good * g_b + bad * b_b
의 공식을 구하면 된다. 이 때 good이 업데이트 되기 전의 값으로 계산해야한다는 것을 기억하자.
(공식이 저렇게 되는 이유는 예를 들면, 좋은날일 확률은 (좋은날이고 또 좋은날이 될 확률) + (나쁜날이었지만 다음이 좋을 확률)인 것을 고민해보자)
728x90
반응형
'백준' 카테고리의 다른 글
[백준] 11721번 - 열 개씩 끊어 출력하기 (파이썬) (0) | 2022.01.04 |
---|---|
[백준] 2163번 - 초콜릿 자르기 (파이썬) (0) | 2022.01.04 |
[백준] 17210번 - 문문문 (0) | 2022.01.03 |
[백준] 1874 - 스택 수열 (0) | 2021.12.28 |
[백준] 4949 - 균형잡힌 세상 (0) | 2021.12.27 |