구슬을 나누는 경우의 수 - 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))
이전에 비슷하게 짰었는데 한번 틀렸었습니다. 그 이유는 위의 코드에서는 현재 numerator와 denominator로 나누어서 계산하지만, 이전에는 한번에 합쳐서 계산했더니 문제가 생겼습니다. 괄호라도 묶었어야 했나 싶었지만 따로 변수를 할당해서 나눗셈을 진행했습니다.
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)] 출력
찾아보니 이런 메소드도 있네요. 유용합니다.
'공부 > 📝 프로그래머스' 카테고리의 다른 글
합성수 찾기 - 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 |