[백준 2407번] 조합 - python
2023. 1. 28. 23:08ㆍcode/[백준] python
2407번
https://www.acmicpc.net/problem/2407
문제
nCm을 출력한다.
입력
n과 m이 주어진다. (5 ≤ n ≤ 100, 5 ≤ m ≤ 100, m ≤ n)
출력
nCm을 출력한다.
🐰 나의 코드
n,m=map(int,input().split())
nsum=1
m=min(m,n-m)
for ni in range(n,n-m,-1):
nsum*=ni
for mi in range(1,m+1):
nsum//=mi
print(nsum)
수험생 시절에 열심히 하던 조합을 다시 만났다.
나이스 투 믿유..^^
nCm의 공식은 n! / (m! x (n-m)!)인데, 이걸 최대한 단순화해야겠다는 생각을 갖고 있었다.
그러다 기억한 공식을 따라서 코드를 작성했다.
예를 들어 8C5라면 8C3과 결과가 같은데,
이렇게 되면 (8*7*6)/(3*2*1)을 하면 공식과 같은 결과를 더 빠르게 구할 수 있다.
이걸 이용해서 코드를 짰다.
우선 입력받은 두 숫자를 n,m에 저장하고 출력될 nsum을 1로 저장했다.
m은 더 작은 수를 해야 더 빨리 계산을 할 수 있을 것 같아 min을 이용하여 m과 n-m 중에서 더 작은 수로 저장했다.
for문은 우선 n에서 n-m+1까지 구할 수 있도록 했고,
이렇게 구해진 i는 nsum에 곱해지도록 했다.
다음 for문에선 1부터 m까지 mi를 구하는데, 이 mi를 nsum에서 나누도록 했다.
최종적으로 nsum은 nCm의 결과값을 같기 때문에 그대로 출력했다.
'code > [백준] python' 카테고리의 다른 글
[백준 2446번] 별 찍기 -9 -python (0) | 2023.01.29 |
---|---|
[백준 1929번] 소수 구하기 - python (0) | 2023.01.27 |
[백준 14652번] 나는 행복합니다~ - python (0) | 2023.01.25 |
[백준 1550번] 16진수 - python (0) | 2023.01.20 |
[백준 4153번] 직각삼각형 - python (1) | 2023.01.20 |