import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int[][] apt = new int[15][15];
for (int i = 0; i < 15; i++) {
apt[i][1] = 1;
apt[0][i] = i;
}
for (int i = 1; i < 15; i++) {
for (int j = 2; j < 15; j++) {
apt[i][j] = apt[i][(j - 1)] + apt[(i-1)][j];
}
}
int T = Integer.parseInt(br.readLine());
for (int i = 0; i < T; i++) {
int k = Integer.parseInt(br.readLine());
int n = Integer.parseInt(br.readLine());
sb.append(apt[k][n]).append("\n");
}
br.close();
System.out.print(sb);
}
}
이차원배열을 이용하여 문제를 풀어보았다.
문제를 읽어보면
"0층의 i호에는 i명이 산다."
-> 0층의 N호에는 n명의 사람이 살게됨을 알 수 있고
"a층의 b호에 살려면 자신의 아래(a-1)층의 1호부터 b호까지 사람들의 수의 합만큼 사람들을 데려와 살아야 한다"
-> 각 층의 1호에는 전부 1명만 살고있음을 알 수 있다.
그리고 0호는 존재하지않으므로 배열의 0,1열과 0행은 해결되었다.
위의 두 번째 문장을 보면 자신 아래층의 1호부터 b호까지의 합한 수라고 되어있는데 자신의 전 호(예를 들어 103호면 102호)가 아래층의 1,2호의 값을 더한 값이므로 전 호수와 자신의 집 아래층의 숫자를 더하면 조건에 맞게된다.
반복문을 통해 해당하는 값을 배열에 다 채워둔 뒤 입력에 맞는 배열값을 출력하도록 하였다.