알고리즘

[프로그래머스] 구슬을 나누는 경우의 수- 파이썬/python

욘아리 2024. 5. 14. 11:46

https://school.programmers.co.kr/learn/courses/30/lessons/120840

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

balls개의 구슬 중 share개의 구슬을 고르는 모든 경우의 수를 구하는 문제다.

 

제한사항
  • 1 ≤ balls ≤ 30
  • 1 ≤ share ≤ 30
  • 구슬을 고르는 순서는 고려하지 않습니다.
  • share ≤ balls

 

예시

Example 1:

balls: 3
share: 2
result: 3

 

Example 2:

balls: 5
share: 3
result: 10

 

풀이

결국 조합의 수를 구하는 문제로, 문제에서 알려준 힌트를 참고해서 풀었다.

👉 조합은 순서에 상관없이 일정한 수의 항목을 선택하는 것을 의미한다.

서로 다른 n개 중 m개를 뽑는 경우의 수 공식
def fac(num):
    a = 1
    for i in range(1, num + 1):
        a *= i
    return a

def solution(balls, share):
    n = fac(balls)
    m = fac(share)
    nm = fac(balls - share)
    
    return n / (nm * m)
  • 팩토리얼을 계산할 함수를 만든다.
  • 조합 공식을 사용하여 계산한다.

 

내장 모듈을 이용한 문제 풀이

import math

def solution(balls, share):
    return math.comb(balls, share)
  • math 모듈(math.comb)을 이용해 푼다.