알고리즘 & 코딩테스트
[백준] 1010번 다리놓기
Haksae
2022. 3. 20. 04:24
⛏ 문제 파악
- 양 편의 다리 놓기 적절한 장소의 숫자를 제공한 뒤, 다리를 놓을 수 있는 경우의 수를 구하는 문제
- 조합론으로 풀면 간단하다.
👉🏻 답안
from math import factorial
T = int(input())
result = 0
for _ in range(T):
N, M = map(int, input().split(' '))
if N == M:
result = 1
elif N > M:
result = factorial(N) // (factorial(N-M) * factorial(M))
elif M > N:
result = factorial(M) // (factorial(M-N) * factorial(N))
print(result)
📑 간단한 설명
- 우선 사랑스러운 파이썬의 math를 임포트하고, 팩토리얼을 쓴다.
- N == M 이 같을 경우는 경우의 수가 1 밖에 없고,
- N > M 인 경우, M > N인 경우를 나눠서 조합론을 이용하여 풀면 된다.
- 만약 팩토리얼을 직접 구현하고 싶은 경우는 아래와 같이 풀면 되겠다. 이게 시간효율이 아주 미세하게 좋다.
T = int(input())
result = 0
def factorial(n):
ans = 1
for i in range(2, n+1):
ans *= i
return ans
for _ in range(T):
N, M = map(int, input().split(' '))
if N == M:
result = 1
elif N > M:
result = factorial(N) // (factorial(N-M) * factorial(M))
elif M > N:
result = factorial(M) // (factorial(M-N) * factorial(N))
print(result)