
0층 i호에는 i명이 거주합니다.
k층 n호에는 (k-1)층의 1호부터 n호까지의 거주민 수의 합이 거주민으로 살고 있습니다.
호 수는 최대 14까지이기 때문에 2차원 배열로 15*15를 선언해준다.
// 아파트 거주민 수를 저장할 배열 (최대 14층, 14호)
int arr[][] = new int[15][15];
0층 i호에는 i명이 산다.
for (int i = 1; i <= 14; i++) {
arr[0][i] = i;
}
2층 -> 1, 4, 10, 20, 35......
1층 -> 1, 3, 6, 10, 15......
0층 -> 1, 2, 3, 4, 5......
규칙이 보이지않나요? 예를 들어 2층 2호의 인원 수를 구할려면
arr[2][2] = arr[2][1] + arr[1][2]
3층 3호의 인원 수를 구할려면
arr[3][3] = arr[3][2] + arr[2][3]
코드로 나타내면
for (int k = 1; k <= 14; k++) {
for (int n = 1; n <= 14; n++) {
arr[k][n] = arr[k-1][n] + arr[k][n-1];
}
}
이렇게 15*15배열을 0,0 빼고 전부 채웠어요. 0,0은 쓰이질 않으니 빼고.
입력받은 테스트 케이스를 처리해보면
for (int t = 0; t < T; t++) {
int k = Integer.parseInt(br.readLine()); // 층 입력
int n = Integer.parseInt(br.readLine()); // 호 입력
bw.write(arr[k][n] + "\n"); // 결과 출력
}
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int T = Integer.parseInt(br.readLine().trim());
int arr[][] = new int[15][15];
for(int i = 1; i <= 14; i++){
arr[0][i] = i;
}
for(int k = 1; k <= 14; k++){
for(int n = 1; n <= 14; n++){
arr[k][n] = arr[k-1][n] + arr[k][n-1];
}
}
for(int t = 0; t < T; t++){
int k = Integer.parseInt(br.readLine());
int n = Integer.parseInt(br.readLine());
bw.write(arr[k][n] + "\n");
}
bw.flush();
bw.close();
br.close();
}
}