반응형
문제
풀이
package solved2;
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 t = Integer.parseInt(br.readLine());//테스트 케이스의 개수
int k = 0, n = 0;//층, 호
int[][] apt = new int[15][15];
for(int i = 0; i < 15; i++) {
apt[i][1] = 1;//i층 1호
apt[0][i] = i;//0층 i호
}
for(int i = 0; i < t; i++) {
k = Integer.parseInt(br.readLine());
n = Integer.parseInt(br.readLine());
for(int layer = 1; layer <= k; layer++) {//1층 ~ k층
for(int ho = 2; ho <= n; ho++) {//2호 ~ n호
apt[layer][ho] = apt[layer][ho - 1] + apt[layer - 1][ho];
}
}
sb.append(apt[k][n]).append('\n');
}
System.out.println(sb);
br.close();
}
}
팁
1. 아파트에는 0층부터 있고 각층에는 1호부터 있으며, 0층의 i호에는 i명이 산다.
-> 이 부분을 활용하여 각 층마다 1호에는 1명이 살고 0층의 i호에는 i명이 사는 것을 알 수 있다.
for(int i = 0; i < 15; i++) {
apt[i][1] = 1;//i층 1호
apt[0][i] = i;//0층 i호
}
2. a층의 b호에 살려면 자신의 아래(a-1)층의 1호부터 b호까지 사람들의 수의 합만큼 사람들을 데려와 살아야 한다
-> 각 테스트 케이스 별로 입력받은 k, n에 대해 1층 ~ k층, 2호 ~ n호까지 남은 칸을 채워나간다.
for(int layer = 1; layer <= k; layer++) {//1층 ~ k층
for(int ho = 2; ho <= n; ho++) {//2호 ~ n호
apt[layer][ho] = apt[layer][ho - 1] + apt[layer - 1][ho];
}
}
출처
반응형
'알고리즘 > Java' 카테고리의 다른 글
[백준] 11399.ATM(Java8) (0) | 2021.10.04 |
---|---|
[백준] 2839.설탕 배달(Java8) (2) | 2021.10.01 |
[백준] 2231.분해합(Java8) (0) | 2021.09.21 |
[백준] 1259.팰린드롬수(Java8) (0) | 2021.09.21 |
[백준] 1085.직사각형에서 탈출(Java8) (0) | 2021.09.20 |