알고리즘/백준

[파이썬, 자바] BOJ_11050(이항 계수 1)

딱따구르리 2021. 3. 21. 17:47
728x90
반응형

문제

 

www.acmicpc.net/problem/11050

 

11050번: 이항 계수 1

첫째 줄에 \(N\)과 \(K\)가 주어진다. (1 ≤ \(N\) ≤ 10, 0 ≤ \(K\) ≤ \(N\))

www.acmicpc.net


 

해설

 

이항 계수 구하는 법은

n! / k!(n - k)! 인데

 

예시를 들어보면(n = 10, k = 4)

10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 / 4 * 3 * 2 * 1 * 6 * 5 * 4 * 3 * 2 * 1

이다.

결국 (n - k)! 만큼은 다 날라간다.

남은 부분만큼만 구해주면 된다.

 


위처럼 직접 계산하지 말고 

math.factorial을 사용하는 법도 있다.

 


코드

 

-파이썬

#백준 11050(이항 계수 1)
from math import factorial

n, k = map(int, input().split())

up = 1
down = 1
for i in range(n, n - k, -1):
    up *= i

for j in range(1, k + 1):
    down *= j

print(up // down)


#factorial 함수 사용해서 푸는 법
# print(factorial(n) // (factorial(k) * factorial(n - k)))  

 

-자바

//백준 11050(이항 계수 1)
import java.util.*;
import java.io.*;

public class Boj_11050 {

	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());

		int n = Integer.parseInt(st.nextToken());
		int k = Integer.parseInt(st.nextToken());
		int up = 1;
		int down = 1;
		
		for(int i = n; i > n - k; i--) {
			up *= i;
		}
		
		for(int j = 1; j < k + 1; j++) { 
			down *= j;
		}
		
		System.out.println(up / down);
	}

}
728x90
반응형