day7 백준 2775번 : 부녀회장이 될테야 [Java]
문제출처
https://www.acmicpc.net/problem/2775
2775번: 부녀회장이 될테야
첫 번째 줄에 Test case의 수 T가 주어진다. 그리고 각각의 케이스마다 입력으로 첫 번째 줄에 정수 k, 두 번째 줄에 정수 n이 주어진다. (1 <= k <= 14, 1 <= n <= 14)
www.acmicpc.net
재귀로 풀었는데 시간초과가 나올까봐 좀 걱정을 했다...
k층 n호에 사는 사람의 수는 k-1층 n호의 사는 사람수와 k층 n-1호에 사는 사람의 수를 더한것과 같기 때문에 계속 재귀 재귀 재귀해서 풀면 되겠다고 생각함.
0층에는 1 2 3 4 5 ... 이런식으로 사람이 늘어나고 각층의 1호에는 사람이 1명밖에 안살기 때문에 미리 채워놨음
import java.util.Scanner;
public class day007_Q2775 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int T = sc.nextInt();
for(int i = 0; i < T; i++) {
int k = sc.nextInt();
int n = sc.nextInt();
k++;
int[][] apt = new int[k][n];
int a = 1;
for(int j = 0; j < k; j++) {
apt[j][0] = 1;
}
for(int j = 0; j < n; j++) {
apt[0][j] = a++;
}
int answer = calc(apt, k - 1, n - 1);
System.out.println(answer);
}
sc.close();
}
public static int calc(int [][] apt, int k, int n) {
if(apt[k - 1][n] == 0) {apt[k - 1][n] = calc(apt, k - 1, n);}
if(apt[k][n - 1] == 0) {apt[k][n - 1] = calc(apt, k, n - 1);}
return apt[k - 1][n] + apt[k][n - 1];
}
}
결과는 런타임 에러다
처음에는 14 14 같이 큰 수에서 오류가 나는건가?했는데
1 1같이 작은데서 오류가 났다..
중간에 k++이 있어서 0층을 구현하는건 괜찮은데
재귀함수의 k-1이나 n-1같은데서 인덱스가 0일 경우에 거기서 더 마이너스가 돼서 오류가 발생했다.
import java.util.Scanner;
public class day007_Q2775 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int T = sc.nextInt();
for(int i = 0; i < T; i++) {
int k = sc.nextInt();
int n = sc.nextInt();
k++;
int[][] apt = new int[k][n];
int a = 1;
for(int j = 0; j < k; j++) {
apt[j][0] = 1;
}
for(int j = 0; j < n; j++) {
apt[0][j] = a++;
}
int answer = apt[k - 1][n - 1];
if(answer == 0) {
answer = calc(apt, k - 1, n - 1);
}
System.out.println(answer);
}
sc.close();
}
public static int calc(int [][] apt, int k, int n) {
if(apt[k - 1][n] == 0) {apt[k - 1][n] = calc(apt, k - 1, n);}
if(apt[k][n - 1] == 0) {apt[k][n - 1] = calc(apt, k, n - 1);}
return apt[k - 1][n] + apt[k][n - 1];
}
}
조건문을 하나 추가해주니 맞았다!
'문제풀이 > 코딩테스트' 카테고리의 다른 글
day9 백준 1316번 : 그룹 단어 체커 [Java] (0) | 2020.09.07 |
---|---|
day8 백준 1712번 : 손익분기점 [Java] (0) | 2020.09.03 |
day6 백준 1011번 : Fly me to the Alpha Centauri [Java] (0) | 2020.09.03 |
day5 백준 10250번 : ACM 호텔 [Java] (0) | 2020.09.01 |
day4 백준 2869번 : 달팽이는 올라가고 싶다 [Java] (0) | 2020.08.31 |