알쓸코지
article thumbnail

🔗 문제

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

 

프로그래머스

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

programmers.co.kr

 

문제 설명

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

제한사항

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

입출력 예

 

💻 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

 

[순열/조합] itertools 라이브러리를 이용하여 순열/조합 구하기

오늘은 Python의 itertools 라이브러리를 이용하여 순열, 조합을 쉽게 구현하는 방법에 대해 알아보자! [1] 개념 1. 순열 (permutation) 서로 다른 n개에서 r를 선택하여 순서 있게 나열하는 것 이를 nPr로

coji.tistory.com


profile

알쓸코지

@chocoji

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!