๐๏ธ ๋์ชฝ ์ฌ์ดํธ ์ค ์์ชฝ ์ฌ์ดํธ ๊ฐ์๋งํผ ์ ํ
๐๏ธ ๋ค๋ฆฌ๊ฐ ๊ฒน์น์ง ์์์ผ ํจ -> ์ ํํ ์ฌ์ดํธ์ ์์ ์๊ดX
โป ์กฐํฉ(๋์ชฝ์ฌ์ดํธC์์ชฝ์ฌ์ดํธ) โป
โญ๏ธํ์ค์นผ์ ์ผ๊ฐํโญ๏ธ
โ ์กฐํฉ์ ๋ฉ๋ชจ์ ์ด์ ๋ฏธ๋ฆฌ ์ด๊ธฐํ ๊ฐ๋ฅ
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int caseCnt = Integer.parseInt(br.readLine());
long[][] dp = new long[31][31]; // ์ต๋ 30C30๊น์ง ๊ณ์ฐ ๊ฐ๋ฅ
// ํ์ค์นผ์ ์ผ๊ฐํ ์ด๊ธฐํ
for (int n = 0; n <= 30; n++) {
dp[n][0] = 1;
dp[n][n] = 1;
for (int r = 1; r < n; r++) {
dp[n][r] = dp[n - 1][r - 1] + dp[n - 1][r];
}
}
//BottomUp
for (int i = 0; i < caseCnt; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int west = Integer.parseInt(st.nextToken());
int east = Integer.parseInt(st.nextToken());
System.out.println(dp[east][west]);
}
}
}
static long[][] dp = new long[31][31];
static long[] resultArr;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int caseCnt = Integer.parseInt(st.nextToken());
resultArr = new long[caseCnt];
for (int x = 0; x < 30; x++) {
Arrays.fill(dp[x], -1L);
}
for(int i=0; i<caseCnt; i++){
st= new StringTokenizer(br.readLine());
int westCnt= Integer.parseInt(st.nextToken());
int eastCnt = Integer.parseInt(st.nextToken());
resultArr[i] = dfs(westCnt,eastCnt);
}
for (long l : resultArr) {
System.out.println(l);
}
}
public static long dfs(int west,int east){
if(west==0 || west==east){
// ๋ฉ๋ชจ์ ์ด์
๊ธฐ๋ณธ๊ฐ ์ด๊ธฐํ
// ํ์ค์นผ์ ์ผ๊ฐํ ์ข/์ฐ =1
return dp[east][west] = 1;
}
// ๋ฉ๋ชจ์ ์ด์
๊ฐ์ด ์๋ค != -1
if(dp[east][west]!=-1){
return dp[east][west];
}
// ํ์ค์นผ์ ์ผ๊ฐํ ๊ท์น
// ๋ฉ๋ชจ์ ์ด์
๊ฐ์ด ์๋ค == -1
// dfs ์ฌ๊ท๋ก ๋ฉ๋ชจ์ ์ด์
๊ฐ์ ์ฐพ์๊ฐ๊ธฐ
return dp[east][west] = dfs(east-1,west-1)+dfs(east-1,west);
}