기록방

BOJ_2407 : 조합 본문

CodingTest/Java

BOJ_2407 : 조합

Soom_1n 2023. 1. 10. 00:18

👉 문제링크

 

2407번: 조합

n과 m이 주어진다. (5 ≤ n ≤ 100, 5 ≤ m ≤ 100, m ≤ n)

www.acmicpc.net



🔸 문제 분석 🔸

  • nCm을 출력한다.
  • n개의 수에서 m개를 선택하는 조합의 공식과 예시는 다음과 같다.
    • n! / (n-r)!r!
    • n=5, r=2 : 5*4*3/2*1
  • n이 팩토리얼로 아주 큰 값으로 커져 long의 범위를 벗어나므로 BigInteger를 사용해야한다.

🔸 코드 🔸

import java.math.BigInteger;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();

        BigInteger n1 = BigInteger.ONE;
        BigInteger n2 = BigInteger.ONE;

        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 변수 n1,n2에 1을 초기화한다.
  • n1은 n!/(n-r)!, n2는 r!를 저장한다.
  • n1/n2를 출력한다.

🔸 end 🔸

  • long형으로 해서 초과하는걸 보고 특수한 공식이 필요한 줄 알았는데 BigInteger를 사용해야하는 문제였다.
  • 조합 공식 n! / (n-r)!r! 를 위처럼 간단히 구현할 수 있는 코드를 배우게되었다.

728x90

'CodingTest > Java' 카테고리의 다른 글

BOJ_25304 : 영수증  (0) 2023.01.12
BOJ_2512 : 예산  (0) 2023.01.11
BOJ_10974 : 모든 순열  (0) 2023.01.10
BOJ_1213 : 팰린드롬 만들기  (0) 2023.01.10
BOJ_1183 : 약속  (0) 2023.01.09