1 ๋ถ„ ์†Œ์š”

๐Ÿ“ [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

ํƒœ๊ทธ: , , ,

์นดํ…Œ๊ณ ๋ฆฌ:

์—…๋ฐ์ดํŠธ: