[프로그래머스]코딩테스트 입문 | 구슬을 나누는 경우의 수 | 경우의 수,팩토리얼, 경우의 수

sun_U·2023년 2월 8일
0
post-thumbnail

문제

머쓱이는 구슬을 친구들에게 나누어주려고 합니다. 구슬은 모두 다르게 생겼습니다. 머쓱이가 갖고 있는 구슬의 개수 balls와 친구들에게 나누어 줄 구슬 개수 share이 매개변수로 주어질 때, balls개의 구슬 중 share개의 구슬을 고르는 가능한 모든 경우의 수를 return 하는 solution 함수를 완성해주세요.

입출력 예시

풀이 방법

이 문제를 풀기 위해 팩토리얼 개념이 필요하다.
팩토리얼은 n!로 표현하며 1부터 n까지 모든 수의 곱을 말하며 팩토리얼을 구현하기 위해 재귀함수, for문, math 모듈을 사용할 수 있다.

나는 이 문제를 풀 때 실제 확률과 통계에서 내가 수학 문제를 풀었던 방법으로 코드를 작성했다.

def solution(balls, share):
    numer, denom = 1, 1
    
    for i in range(share):
        numer *= balls - i
        denom *= i + 1 
        
    answer = int(numer / denom)
    return answer

다른 풀이

다른 사람의 풀이를 봤을 때 다양한 방법들이 존재했다.

  1. math 모듈의 comb(n, k) 함수 사용
  • 바로 원하는 답을 구해주는 함수가 존재했다...!🤣 별 다른 코드 없이 이 함수만 사용해도 n개의 수에서 k개를 선택하는 경우의 수를 알려준다.
    import math
    
    def solution(balls, share):
       return math.comb(balls, share)
    ``
  1. math 모듈의 factorial(x) 함수 사용
  • 팩토리얼을 구해주는 factorial() 함수를 사용해 정석 수학 공식으로 경우의 수를 구한다.

    import math
    
    def solution(balls, share):
       return math.factorial(balls)/(math.factorial(balls-share)*math.factorial(share))
  1. for문을 사용해 factorial 구현
  • math모듈을 사용하지 않고 for문으로 factorial을 구현해 위의 공식을 사용한다.
profile
Data Engineer AI/ Metaverse :)

0개의 댓글