티스토리 뷰

알고리즘/백준

[BAEKJOON] 2407 조합

응애~ 개발자 2022. 12. 8. 15:48
728x90
반응형

문제 요약

 

2407번: 조합

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

www.acmicpc.net

문제풀이

 이번 문제는 조합 공식만 알면 되는데 파이썬같은 동적 변수타입은 문제 없지만 정적 타입 선언 해야 되는 언어는 long타입 선언해도 결과값이 오버 되기때문에 그점을 유의 하면서 풀면 된다.

 

Code

Python

 파이썬은 어떤 방식으로 풀어도 된다. 그래서 factorial과 comb 사용 법만 알면된다.

from math import factorial
n, m = map(int, input().split())
print(factorial(n) // (factorial(n - m) * factorial(m)))
from math import comb
n, m = map(int, input().split())
print(comb(n, m))

Java

 자바는  long 타입 해도 조합 결과 값이 범위가 넘기 때문에 BigInteger 클래스 사용법을 알아 두면된다. 그리고 파이썬 처럼  factorial이나 comb 지원이 안되서 직접 factorial 구현해야된다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigInteger;
import java.util.StringTokenizer;

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

		System.out.println(factorial(N).divide(factorial(N.subtract(M)).multiply(factorial(M))));
		
	}
	
	public static BigInteger factorial(BigInteger n) {
		if (n.intValue() == 1) return new BigInteger("1");
		return factorial(n.subtract(new BigInteger("1"))).multiply(n);
	}
		
}
728x90
반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함