https://www.acmicpc.net/problem/2407
기초문제로 BigInteger타입과 그 연산( dp[i][j]=dp[i-1][j-1].add(dp[i-1][j]); )방식에 대해 알아두기.
BigInteger에 대하여https://coding-factory.tistory.com/604#google_vignette
==>> int는 메모리 크기는 4byte로 표현할 수 있는 범위는 -2,147,483,648 ~ 2,147,483,647이고 long은 메모리 크기는 8byte로 표현할 수 있는 범위는 -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807입니다. 그 범위를 넘어서게 되면 모두 0으로 출력이 됩니다. 숫자의 범위가 저 범위를 넘을 경우는 잘 없겠지만 프로그램 개발 특히 돈과 관련된 개발이나 알고리즘 문제를 풀 때 항상 최악의 상황을 고려해야 하므로 무한의 정수가 들어갈 수 있는 가능성이 있다면 BigInteger이라는 클래스를 활용하는 것이 좋습니다. BigInteger은 문자열 형태로 이루어져 있어 숫자의 범위가 무한하기에 어떠한 숫자이든지 담을 수 있습니다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.math.BigInteger;
import java.util.StringTokenizer;
public class Testing3{
public static void solution(int n, int m){
//nCr=n-1Cr-1+n-1Cr
BigInteger[][]dp=new BigInteger[n+1][n+1];
for(int i=1;i<n+1;++i){
for(int j=0;j<i+1;++j){
if(j==0 ||j==i){
dp[i][j]=BigInteger.ONE;
continue;
}
dp[i][j]=dp[i-1][j-1].add(dp[i-1][j]);
}
}
System.out.println(dp[n][m]);
}
public static void main(String[] args) throws Exception{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st=new StringTokenizer(br.readLine());
int n=Integer.parseInt(st.nextToken());
int m=Integer.parseInt(st.nextToken());
solution(n,m);
}
}
'알고리즘 > DP(Dynamic programming, 동적프로그래밍)' 카테고리의 다른 글
백준(BOJ) 12849: 본대 산책 (0) | 2024.01.14 |
---|---|
백준(BOJ) 2655: 가장높은 탑쌓기 (1) | 2023.12.31 |
백준(BOJ) 1932: 정수 삼각형 (1) | 2023.12.31 |
백준(BOJ) 1495: 기타리스트 (0) | 2023.12.30 |
백준(BOJ) 2579: 계단 오르기 (1) | 2023.12.30 |