[백준] 1010번 다리놓기 (실버)
728x90
반응형
m >=n 일 때 n개의 다리를 놓을 수 있는 경우의 수를 구하는 문제이다.
n만큼 뽑아서 순서대로 놓으면 되기 때문에 조합의 수를 구하면 된다.
1. 내 풀이
5C2의 경우 n=2이고 m=5 이다.
n 의 개수만큼 5*4 5부터 1씩 빼면서 곱해주고 거기서 다시 n인 2부터 n의 개수만큼만 곱한 수를 나눠주면 된다
다시 말하면 5*4 / 2*1 이 답이다.
n=3인 경우는 3개씩이니까 5*4*3 / 3*2*1 이다.
import sys
input=sys.stdin.readline
t=int(input())
for _ in range(t):
n, m = map(int, input().split())
answer=1;
mm=m;
for _ in range(n):
answer*=mm
mm-=1
for i in range(n,0,-1):
answer=answer//i
print(answer)
2. 다른 사람의 풀이
factorial을 구해놓고 푸는 좋은 방법을 봤다
실행시간과 메모리 사용은 위 풀이와 같았다.
import sys
input=sys.stdin.readline
t=int(input())
# 팩토리얼이 담기는 배열
factorial=[1,1] # factorial[0] =1 이다
for i in range(2,30): # m이 30보다 작다
factorial.append(factorial[-1]*i)
for _ in range(t):
n, m = map(int, input().split())
print(factorial[m]//factorial[n]//factorial[m-n])
728x90
반응형
'백준' 카테고리의 다른 글
[백준 9251번] LCS (파이썬, 최장 공통 부분 수열, DP) (0) | 2020.12.21 |
---|---|
[백준 1059번] 좋은 구간 (실버 5) (0) | 2020.12.21 |
[백준] 팰린드롬 만들기 (1254번, 파이썬) (0) | 2020.12.16 |
[백준 2644번] 촌수계산 (python, dfs) (0) | 2020.11.26 |
[백준 2343번] 기타 레슨 (이분탐색, python, binary search) (0) | 2020.11.26 |
TAGS.