Algorithm/Problem solving

[백준/Java] 11050 이항 계수 1

jjh0119 2025. 3. 25. 18:33

[문제 링크]

문제


자연수 N과 정수 K가 주어졌을 때 이항 계수  를 구하는 프로그램을 작성하시오.


입력


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


출력


를 출력한다.


풀이

문제에 이항계수에 대한 설명이 하나도 없기 때문에 이항계수가 무엇인지부터 알아봤다.

이항계수란?

주어진 크기의 집합에서 원하는 개수만큼 순서없이 뽑는 조합의 개수. 여기서의 이항은 항을 옮기다의 이항(移項)이 아니라 두개의 항(二項)이라는 뜻이며 뽑거나 뽑지 않거나의 두가지 경우의 수를 의미

사실 말로만 들어서는 개념이 잘 이해가 되지 않긴 했지만 N개의 조합 중에 K개를 뽑는 경우의 수를 구하는 것이라고 생각하기로 했다.

그리고 이 이항 계수는 다음과 같이 정의되는데

우선은 이 공식을 이용해서 풀어보기로 했다.

  1. 팩토리얼을 여러 번 사용해야 하기 때문에 메소드로 구현
  2. 이항계수 공식을 메소드로 구현
  3. 입력받은 N과 K를 이항계수 메소드로 넘기고 받아 온 리턴 값을 출력
import java.io.*;
import java.util.*;

public class Main {
    public static int factorial(int n) {
        int result = 1;
        for (int i = 1; i <= n; i++) {
            result *= i;
        }
        return result;
    } //팩토리얼

    public static int binomial_Coef_factorial(int n, int k) {
        return factorial(n) / (factorial(k) * factorial(n - k));
    } // 이항계수 공식을 구현

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        StringTokenizer st = new StringTokenizer(br.readLine());
        int N = Integer.parseInt(st.nextToken());
        int K = Integer.parseInt(st.nextToken());

        bw.write(binomial_Coef_factorial(N, K) + "\n");

        bw.flush();
        bw.close();
        br.close();
    }
}

'Algorithm > Problem solving' 카테고리의 다른 글

[백준/Java] 2108 통계학  (0) 2025.03.25
[백준/Java] 1010 다리 놓기  (0) 2025.03.25
[백준/Java] 28279 덱2  (0) 2025.03.25
[백준/Java] 11866 요세푸스 문제 0  (0) 2025.03.25
[백준/Java] 2164 카드2  (0) 2025.03.25