프로그래머스/LV2

[프로그래머스 Lv2, python]- 멀리 뛰기

chyam_eun 2024. 12. 30. 10:11

def combi(m,n):
    if  n==0 or m==n:
        return 1
    else: #조합을 재귀로 표현
        return combi(m-1,n-1)*m//n
def solution(n):
    cnt=0
    ma=n
    while(n>=0):
        cnt+=combi(ma,n) # n을 1로 다 두고 1을 2개씩 묶어서 그때마다 경우의수를 구함
        ma-=1 
        n-=2
    return cnt%1234567
    
# 1 1 1 1 => 4C4 (1개)
# 1 1 2 => 3C2 (3개)
# 2 2 => 2C0 (1개)

처음 풀이(위에)는 테스트케이스 5개정도 런타임에러걸려서 통과를 못했었다.

아래 풀이는 재귀말고 반복문으로 구하였다.

def combi(m,n):
    mul=1
    div=1
    for a in range(n): #조합
        mul*=(m-a) #분자
        div*=(n-a) #분모
    return mul//div
def solution(n):
    cnt=0
    ma=n
    while(n>=0):
        cnt+=combi(ma,n)
        ma-=1 
        n-=2
    return cnt%1234567