728x90
반응형
문제
https://school.programmers.co.kr/learn/courses/30/lessons/120840
해설
1) 첫 풀이(시간 초과)
itertools의 combinations를 imort해서 combinations(balls, share) 로 풀려고 했는데
combinations는 아래의 코드처럼 balls가 숫자가 아니라 리스트 형태여야 한다.
from itertools import combinations
nums = [1,2,3,4]
combi = list(combinations(nums, 2))
#[(1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4)]
그래서 balls만큼 0을 할당해 리스트를 만들어 대신 넣어줬더니 시간초과가 났다.
#시간 초과 난 코드
from itertools import combinations
def solution(balls, share):
balls_lst = [0] * balls
combi = list(combinations(balls_lst, share))
return len(combi)
2) 두번째 풀이(성공)
그 다음으로는 조합이 n! // (r! * (n-r)!) 이므로 직접 계산해버렸다.
def solution(balls, share):
answer = 0
top = 1 #n!
for i in range(1, balls+1):
top *= i
btm1 = 1 #r!
btm2 = 1 #(n-r)!
for i in range(1, share+1):
btm1 *= i
for i in range(1, balls-share+1):
btm2 *= i
answer = top // (btm1*btm2)
return answer
아래의 코드는 다른 사람의 코드이다.
math 모듈에 comb 함수가 있다는 걸 이번에 알았다.
math.comb(n, k)는 nCk와 같은 조합 값을 반환하므로 이를 사용하면 쉽게 풀 수 있다.
코드
-파이썬
import math
def solution(balls, share):
return math.comb(balls, share)
728x90
반응형
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[파이썬] 프로그래머스_2차원으로 만들기 (0) | 2022.11.02 |
---|---|
[파이썬] 프로그래머스_모스부호(1) (0) | 2022.10.26 |
[파이썬] 프로그래머스_외계행성의 나이 (0) | 2022.10.25 |
[파이썬] 프로그래머스_진료순서 정하기 (0) | 2022.10.25 |
[파이썬] 프로그래머스_최빈값 구하기 (0) | 2022.10.25 |