🔗 문제
https://school.programmers.co.kr/learn/courses/30/lessons/120840
문제 설명
머쓱이는 구슬을 친구들에게 나누어주려고 합니다. 구슬은 모두 다르게 생겼습니다. 머쓱이가 갖고 있는 구슬의 개수 balls
와 친구들에게 나누어 줄 구슬 개수 share
이 매개변수로 주어질 때, balls
개의 구슬 중 share
개의 구슬을 고르는 가능한 모든 경우의 수를 return 하는 solution 함수를 완성해주세요.
제한사항
- 1 ≤
balls
≤ 30 - 1 ≤
share
≤ 30 - 구슬을 고르는 순서는 고려하지 않습니다.
share
≤balls
입출력 예
💻 Code
첫 번째 시도 - combinations
이용해서 모든 조합 구한 뒤 길이 리턴하기
from itertools import combinations
def solution(balls, share):
return len(list(combinations(range(1, balls + 1), share)))
➡️ 시간 초과 발생!
➡️ 문제에서 요구하는 것은 단순히 경우의 수
이므로 factorial
을 이용하여 계산해보기로 함
두 번째 시도 - factorial
을 이용하여 계산하기
from math import factorial
def solution(balls, share):
return factorial(balls) / (factorial(balls - share) * factorial(share))
조합: nCr = n! / r!(n - r)! (단, r <= n)
- 위의 공식을 이용하여 직접 계산하면 시간 초과 없이 문제를 해결할 수 있다!
⬇️ 조합에 대해 더 알고 싶다면 아래 게시글 참고해주세요!
https://coji.tistory.com/15
'Algorithm > 프로그래머스' 카테고리의 다른 글
[Lv.0/Python] qr code (0) | 2023.07.13 |
---|---|
[Lv.0/Python] 문자열 계산하기 (0) | 2023.07.13 |
[Lv.0/Python] 문자열 여러 번 뒤집기 (0) | 2023.07.13 |
[Lv.0/Python] 영어가 싫어요 (0) | 2023.07.10 |
[Lv.0/Python] 잘라서 배열로 저장하기 (0) | 2023.07.10 |