강 좌우로 N개와 M개의 포지션을 연결하는 문제, 최대 N개는 무조건 놔야함
한번 지으면 그 전의 point는 연결할 수 없음
def factorial(n:int) -> int:
n_fac = 1
for i in range(1, (n+1)) : # n!
n_fac = n_fac * i
return n_fac
loop_num = int(input())
for _ in range(loop_num):
n, m = map(int, input().split())
bridge_num = int(factorial(m) / (factorial(m-n) * factorial(n)))
print(bridge_num)
n * (n-1) * ... * 1
로 생각이 굳어져서 어렵게 하려다보니 잘 안풀렸고, 또 저 수식 자체를 함수화 하는게 아니라 n * (n-1)
을 함수화 하려고하니까 더 꼬였다. 하나배움!int(factorial(m) / (factorial(m-n) * factorial(n)))
이 아니라 몫을 나타내는 //
을 사용했으면 더 의미적으로 맞는 식이 나왔을 것 같다# math 모듈을 사용한 방법
import math
T = int(input())
for _ in range(T):
n, m = map(int, input().split())
bridge = math.factorial(m) // (math.factorial(n) * math.factorial(m - n))
print(bridge)
좋은 코드입니다.
한가지 더 첨언해드리자면 math 모듈의 comb 함수를 사용해서도 구현 가능합니다.
조합을 계산하고 조합값을 곱하여 다리구성의 경우의 수를 계산하는 비교적 간단한 방식의
연산이기에 위 모듈(math)이 사용 가능하다면 한번 쯤 해보시길 추천드립니다.
좋은 글 잘보았습니다.