본문 바로가기

프로그래밍/BOJ_Python 목표는 Diamond

[Python | 11050] 이항계수

[Python | 11050] 이항계수

 

문제 푸는 이유

진짜 오랜만에 글쓴다😥 12월 중순까지 프로젝트 3개, 졸업논문 남았지만 뭔가 오늘은 폭풍의 눈같은 상황인 것 같당. 내일 되면 발표 리허설, 프로젝트 미팅 2개 있는데ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 난 왜 마음이 편안한거지 그래서 편안한김에 오랜만에 알고리즘 문제 풀어보려고 한다. 내년 3월까지 solved.ac class 문제 다 풀고 싶당

 

문제 내용

 

두 수가 주어졌을 때 이항계수를 구하는 문제이다.

이항계수란 전체 n개의 항중 k개를 고르는 경우의 수를 의미한다.

이항계수 식만 알면 쉽게 구현할 수 있다.

 

💔 try1. failed!

나레기 이항계수 어케구하는지 모름,,,

# 111050: 이항계수 구하기

n, k = map(int, input().split(" "))
#bino = n * (n-1) * ... (n-k+1)

result = 1

for i in range(1, k+1):
    result *= n
    n -= 1

print(result)

 

이항계수 식을 찾아보고 다시 도전!!

이항계수 공식

 

❤ try2 solved!

# 111050: 이항계수 구하기

n, k = map(int, input().split(" "))
#bino = n * (n-1) * ... (n-k+1)/k!

result = 1

for i in range(1, k+1):
    result *= n
    result /= i
    n -= 1

print(int(result))

 

결과

44ms 가 걸렸다. 다른 사람들 코드를 찾아보았다.

 

오... 재귀 함수를 사용해서 푸는 방법도 있다.

 

# 11050: 이항계수 재귀함수

def factorial(n):
    if n == 0:
        return 1
    return factorial(n-1) * n

n, k = map(int, input().split())
print(factorial(n)//(factorial(n-k)*factorial(k)))

코드 결과.

근데 코드 길이랑 런타임은 비슷하다

그래도 함수 써서 코드가 좀 간결해진 게 장점인 거 같다.

 

결론

구현이 어렵지는 않았다.

문제는 수학이었다.

수학 공부를 해야겠다. 특히 확통.