구슬을 나누는 경우의 수 - Python

2023. 9. 22. 11:47공부/📝 프로그래머스

def factorial(n, m):
    num = 1
    while n >= m:
        num *= n
        n -= 1
    return num


def solution(balls, share):
    numerator = factorial(balls, 1)
    denominator = factorial(share, 1) * factorial(balls - share, 1)
    answer = numerator / denominator
    return answer


# Test Cases
print(solution(3, 2))
print(solution(5, 3))

  이전에 비슷하게 짰었는데 한번 틀렸었습니다. 그 이유는 위의 코드에서는 현재 numeratordenominator로 나누어서 계산하지만, 이전에는 한번에 합쳐서 계산했더니 문제가 생겼습니다. 괄호라도 묶었어야 했나 싶었지만 따로 변수를 할당해서 나눗셈을 진행했습니다.

 


import math


def solution(balls, share):
    return math.comb(balls, share)

  이 기능을 지원하는 메소드도 있을 것 같긴 했습니다 ㅋㅋ...

 


def comb(n, m):
    if n == m or m == 0:
        return 1
    else:
        return comb(n - 1, m - 1) + comb(n - 1, m)

def solution(balls, share):
    return comb(balls, share)

# Test Cases
print(solution(3, 2))
print(solution(5, 3))
print(solution(30, 15))

  파스칼의 삼각형으로 풀었습니다. 그런데 타임오버로 나오네요. 조금 더 계산해야겠습니다. 아래의 그림은 파스칼의 삼각형의 이해에 도움이 되는 그림입니다.

 


from itertools import combinations, permutations


nums = [1,2,3,4]
combi = list(combinations(nums, 2))

# [(1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4)] 출력

  찾아보니 이런 메소드도 있네요. 유용합니다.

 


 

프로그래머스

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

programmers.co.kr

 

'공부 > 📝 프로그래머스' 카테고리의 다른 글

합성수 찾기 - Python  (0) 2023.09.24
2차원으로 만들기 - Python  (0) 2023.09.22
가위 바위 보 - Python  (0) 2023.09.22
모스부호 (1) - Python  (0) 2023.09.22
개미 군단 - Python  (0) 2023.09.22