n가지중 r개를 선택하는 방법, 즉 조합의 공식이다.
n과 r을 입력받아 조합의 수를 구하는 코드를 짜보았다.
int, long으로는 커버할 수 없는 수까지 금방 올라가기에 BigInteger 클래스를 사용했다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigInteger;
public class ex {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input = br.readLine();
int N = Integer.parseInt(input.split(" ")[0]);
int R = Integer.parseInt(input.split(" ")[1]);
int N_original = N;
br.close();
BigInteger solution = BigInteger.ONE;
int dif = R > N/2 ? N-R : R;
while(dif != 0) {
solution = solution.multiply(BigInteger.valueOf(N));
N -= 1;
dif -= 1;
}
solution = R > N_original/2 ? solution.divide(factorial(N_original-R)) : solution.divide(factorial(R));
System.out.println(solution);
}
public static BigInteger factorial(int n) {
if (n <= 1)
return BigInteger.ONE;
BigInteger k = BigInteger.ONE;
for (int i = 2; i <= n; i++) {
k = k.multiply(BigInteger.valueOf(i));
}
return k;
}
}
'PROGRAMMING > Java' 카테고리의 다른 글
equals()와 '==' 에 대하여 (0) | 2019.09.08 |
---|---|
Scanner.next 메소드 이후에 Scanner.nextLine 메소드 하나를 스킵하는 이유 (2) | 2018.04.27 |
java.sql.SQLException 전방향 전용 결과 집합에 부적합한 작업이 수행되었습니다. (0) | 2018.04.19 |
어레이리스트(Arraylist) 정렬(sort)하기 (1) | 2018.04.10 |
드라이버 로드를 위한 Class.forName 메소드, 더 이상 필수가 아닙니다. (0) | 2018.02.28 |