기록방
BOJ_2407 : 조합 본문
🔸 문제 분석 🔸
- nCm을 출력한다.
- n개의 수에서 m개를 선택하는 조합의 공식과 예시는 다음과 같다.
- n! / (n-r)!r!
- n=5, r=2 : 5*4*3/2*1
- n이 팩토리얼로 아주 큰 값으로 커져 long의 범위를 벗어나므로 BigInteger를 사용해야한다.
🔸 코드 🔸
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
BigInteger n1 = BigInteger.ONE;
BigInteger n2 = BigInteger.ONE;
for (int i = 0; i < m; i++) {
n1 = n1.multiply(new BigInteger(String.valueOf(n - i)));
n2 = n2.multiply(new BigInteger(String.valueOf(i + 1)));
}
System.out.println(n1.divide(n2));
}
}
🔸 코드 해석 🔸
- BigInteger 변수 n1,n2에 1을 초기화한다.
- n1은 n!/(n-r)!, n2는 r!를 저장한다.
- n1/n2를 출력한다.
🔸 end 🔸
- long형으로 해서 초과하는걸 보고 특수한 공식이 필요한 줄 알았는데 BigInteger를 사용해야하는 문제였다.
- 조합 공식 n! / (n-r)!r! 를 위처럼 간단히 구현할 수 있는 코드를 배우게되었다.
728x90
'CodingTest > Java' 카테고리의 다른 글
BOJ_25304 : 영수증 (0) | 2023.01.12 |
---|---|
BOJ_2512 : 예산 (0) | 2023.01.11 |
BOJ_10974 : 모든 순열 (0) | 2023.01.10 |
BOJ_1213 : 팰린드롬 만들기 (0) | 2023.01.10 |
BOJ_1183 : 약속 (0) | 2023.01.09 |