본문 바로가기

알고리즘/백준 문제 풀이

[Python] 32612번 Expected Eyes

728x90

 

https://www.acmicpc.net/problem/32612


 

24/11/15

 

 

두 가지 방법으로 풀 수 있다. 둘다 소개해보려고 한다.


 

문제 접근 방식:

 

 

1. 파이썬의 itertools모듈의 product함수를 이용한다.

 

직접 모든 가능한 경우의 수를 조사하면서 기댓값을 구한다. 이 접근방식의 시복도는 최대 $\mathcal{O}(8^8)$이다. 따라서 파이썬3로는 통과하기 힘들고 파이파이로 하면 통과된다.

 

2. 기댓값의 선형성 이용

 

전체 기댓값은 선형성에 의해 각 주사위의 기댓값의 합과 같다. 이를 이용하면 한줄로 코딩할 수 있다.


아래는 내가 위의 접근 방식과 같이 작성한 파이썬 코드이다. 더보기를 누르면 확인할 수 있다.

더보기
# 32612번 Expected Eyes
# 1. 나이브한 반복 풀이
from itertools import product
n = int(input())
x = list(map(int, input().split()))
m, k = 0, 0
for tpl in product(range(1, 9), repeat = n):
    flag = False
    for i in range(n):
        if tpl[i] > x[i]:
            flag = True
            break
    if flag: continue
    k += 1
    m += sum(tpl)
print(m/k)
# 2. 기댓값의 선형성
input()
print(sum(map(lambda x:(int(x)+1)/2,input().split())))

'알고리즘 > 백준 문제 풀이' 카테고리의 다른 글

[Python] 2733번 Brainf*ck  (0) 2024.11.18
[Python] 32390번 과녁 맞히기  (0) 2024.11.17
[Python] 1178번 간선 추가  (0) 2024.11.15
[Python] 2418번 단어 격자  (0) 2024.11.14
[Python] 1520번 내리막 길  (0) 2024.11.13