본문 바로가기

백준

[백준] 17211번 - 좋은 날 싫은 날 (파이썬 python)

반응형

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
반응형