이전에 공부했던 collections 모듈의 defaultdict
와 Counter
를 사용해서
두개의 주사위를 굴렸을 때 나올 수 있는 주사위 눈의 합과 경우의 수를 구해보겠습니다.
주사위의 눈의 합은 최소 2 부터 최대 12까지 나올 수 있으며
예를 들어, 주사위의 합이 5라면 나올 수 있는 경우의 수는 (1,4), (2,3), (3,2), (4,1)로 4가 됩니다.
from collections import Counter, defaultdict
# S : 주사위의 합
def find_dice(S, n_faces = 6):
# 예외 처리
if S > 2 * n_faces or S < 2:
return None
cdict = Counter() # 카운터 딕셔너리(경우의 수 담아주기)
ddict = defaultdict(list) # 디폴트 딕셔너리(주사위 수의 경우들을 담아주기), 값은 리스트 형태로
# dice1 : 첫번째 주사위, dice2 : 두번째 주사위
for dice1 in range(1, n_faces + 1):
for dice2 in range(1, n_faces + 1):
t = [dice1, dice2] # 주사위1, 주사위2의 나올 수 있는 모든 경우
cdict[dice1 + dice2] += 1
ddict[dice1 + dice2].append(t)
return [cdict[S], ddict[S]] # [경우의 수, [나올수 있는 모든 경우]]
if __name__ == "__main__":
result = find_dice(5)
print(result)
cdict는 주사위 눈의 합이 나올 경우의 수를 세는 카운트 딕셔너리,
ddict는 주사위 눈들의 모든 경우의 수를 저장하는 디폴트 딕셔너리로 (주사위 눈의 합, 경우) 쌍으로 저장합니다.
이중 for문을 통해 첫번째와 두번째 주사위의 모든 경우의 수를 저장한 다음 메소드에서 경우의 수, 모든 경우 쌍으로 리스트 형식으로 return합니다.
[Python] collections 모듈(defaultdict, OrderedDict, Counter)/문장의 단어 갯수 세기 (0) | 2021.11.30 |
---|