728x90
https://www.acmicpc.net/problem/1010
조합으로 푸는 문제다.
중고등 수학을 했다면 이해는 바로되는 문제.
왼쪽에 N개, 오른 쪽에 M개의 노드가 있는데 M개 중에서 N개를 꼽아 서로 중복되지 않게 (순서는 무관하게) 왼쪽 N개의 노드와 이어 다리를 만드는 문제다.
n_C_m 으로 표현할 수 있다.
이는 팩토리얼로 m! / (m-n)! * n! 으로 표현 가능하다.
코드
import sys,math
T = int(input())
for i in range(T):
n, m = map(int, input().split())
print(math.factorial(m)//(math.factorial(m-n)*math.factorial(n)))
C++ 이었으면 factorial 을 구해서 풀었을 것이고 파이썬을 잘 모르니까 난 그렇게 풀려고 했는데...
알고보니 math 라는 좋은 module 이 존재한다. 코테에서도 이 모듈을 쓸수 있으려나?
팩토리얼 문제는 이 math.factorial 을 활용하면 빨리 풀듯 싶다.
알게 된 것
- python 엔 math 라는 모듈이 존재하고 이 안의 함수인 factorial 을 통해 정수 팩토리얼 값을 불러 올 수 있다.
- /과 다르게 // 은 FPE 가 없이 정수 / 정수를 실행한다. 오차가 없다.
'프로그래밍 > programmers&bj' 카테고리의 다른 글
[python] 1138번: 한 줄로 서기 (0) | 2020.08.14 |
---|---|
[python] 백준 10828번: 스택 (파이썬으로 스택 구현하기) (0) | 2020.08.06 |
[python] 백준 1152번: 단어의 개수 (0) | 2020.08.06 |
[python] 백준 1902번: 수 찾기 (0) | 2020.08.06 |
[C++] 백준 1309번: 동물원 (0) | 2020.08.04 |