백준 알고리즘 11050번: 이항계수 1 python

kimminjunnn·2025년 4월 15일

알고리즘

목록 보기
28/311

https://www.acmicpc.net/problem/11050

문제

자연수 N과 정수 K가 주어졌을 때 이항계수를 구하는 문제.

이항계수란?
"이항계수란 주어진 집합에서 원하는 개수만큼 순서없이 뽑는 조합의 개수"

즉 (5,2) 란 (a,b,c,d,e) 5개의 원소에서 2개를 순서없이 뽑는 조합의 개수이다.
(a,b),(a,c),(a,d),(a,e),(b,c),
(b,d),(b,e),(c,d),(c,e),(d,e)
이렇게 총 10개인 것을 확인 할 수 있다.

언젠가 이거 공식이 있었던 것 같은 기억에 찾아보았다.

맞아. 이렇게 표현했었고, 저런 공식이 있었었지.

이전 블로깅이 팩토리얼이었는데 여기서 쓸려고 선제한거였구나
백준 10872번: 팩토리얼 python

N!을 구하는 코드는

import sys

N = int(sys.stdin.readline())

result = 1
while N > 0:
    result *= N
    N -= 1

print(result)

이렇게 정의했었기에 이를 이용하여 문제를 풀어보았다.

내 해답 :

import sys

def factorial(n):
    result = 1
    while n > 0:
        result *= n
        n -= 1
    return result

def nCk(n,k):
     return factorial(n) // (factorial(n - k) * factorial(k))

def main():
    n, k = map(int, sys.stdin.readline().split())
    print(nCk(n, k))

main()

팩토리얼을 구하는 함수, 이항계수를 구하는 함수를 따로 정의하여 main 함수에서 합쳐주었다.

사실 factorial 구하는 함수만 정의한 뒤
print(factorial(n) // (factorial(n - k) * factorial(k)) 이런식으로 print 해주면 코드가 더 짧아질 수 있을 것 같다.

profile
Frontend Engineers

0개의 댓글