BOJ_S3_2407
๐ [S3_2407] ์กฐํฉ
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigInteger;
import java.util.StringTokenizer;
public class Main {
static StringTokenizer st;
static long res;
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
st = new StringTokenizer(br.readLine(), " ");
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
// n1,n2 1๋ก ์ด๊ธฐํ
BigInteger n1 = BigInteger.ONE;
BigInteger n2 = BigInteger.ONE;
// nCm ๊ณ์ฐ = ( n * (n-1) * (n-2) .. * (n-m+1) ) / ( 1 * 2 * 3 .. * m )
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๋ฅผ ์จ์ผํ๋ ๊ฒ์ด์๋ค.
์จ๋ณธ ๊ธฐ์ต์ด ์๋ ํ์ ์๋ฃ๋ฅผ ์ฐพ์๋ดค๋๋ฐ BigInteger๋ byte์ String์์๋ง ๋ณ๊ฒฝ์ด ๊ฐ๋ฅํด์ ์๋ฅผ String์ผ๋ก ํ๋ณํ ํด์ฃผ๊ณ ๋ค์ BigInteger๋ก ํ๋ณํ์ ํด์ฃผ์๋ค.
๊ทธ๋ฆฌ๊ณ ๊ณฑํ๋ ๊ฒ์ด multiply์ด๊ณ ๋๋๋ ๊ฒ์ด divide ์๋ค.
์ด๋ป๊ฒ ๋ณด๋ฉด ๊ฐ๋จํ ๋ฌธ์ ์๋๋ฐ BigInteger์ ๋ํด ์ ๋ชฐ๋ผ์ ๋ชป ํ์๋ ๊ฒ ๊ฐ๋ค.
๊ทธ๋ฆฌ๊ณ ์ข ์ฐพ์๋ณด๋ค ์กฐํฉ ์์ผ๋ก (n-1)C(m-1) + (n-1)Cm (์ฌ๊ท) ๋ ์ ์๊ณ ์์ผ๋ฉด ์ ์ฌ์ฉ ๋ ๊ฒ ๊ฐ๋ค.
์กฐํฉ ์
- nCr = n! / (n-r)!r!
- nCr = n-1 C r-1 + n-1 C r -> ์ฌ๊ท์ ํํ
- nC0 = 1