곽로그
[백준 9095, Java] 1,2,3 더하기 본문
반응형
문제
풀이
1. 단순재귀
- 입력의 최대가 11이므로 memoization이 없어도 시간초과가 나지않는다.
2. 점화식
- 이 문제도 계단 오르기 문제와 비슷하다( n개의 계단을 1칸 또는 2칸이동하여 오르는 경우의 수). 문제의 최소단위가 1을 더하기, 2를 더하기, 3을 더하기이므로 f(n)= 1,2,3의 합으로 n을 나타내는 경우의수 로 정의하면 f(n) = f(n-1) + f(n-2) + f(n-3)으로 정의할 수 있다.
check
- counts 배열을 선언할 때 크기를 n으로 하게되면 런타임 에러가 나는데 그 이유는 배열의 초기화를 index =2 까지 했기떄문이다. 다시말해 n=2 이게되면 Arrayarrayoutofboundsexception 예외가 발생한다.
코드
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Main {
public static int[] counts;
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int T = Integer.parseInt( br.readLine());
for(int t= 0 ; t< T; t++){
int N = Integer.parseInt(br.readLine().trim());
counts = new int[12];
counts[0] = 1;
counts[1] = 1;
counts[2] = 2;
int count = makeNTopDown(N);
bw.write(String.valueOf(count)+"\n");
}
bw.flush();
br.close();
bw.close();
}
public static void makeNbottomUp(int N ){
for(int num = 3; num<=N ; num++){
counts[num] = counts[num-1] + counts[num-2] + counts[num-3];
}
}
public static int makeNTopDown(int N ){
if (N <= 2) {
return counts[N];
}
if(counts[N]>0){
return counts[N];
}
counts[N] = makeNTopDown(N-1)+ makeNTopDown(N-2) + makeNTopDown(N-3);
return counts[N];
}
}
반응형
'알고리즘 > 백준' 카테고리의 다른 글
[백준 10844, Java] 쉬운 계단 수 (0) | 2020.11.09 |
---|---|
[백준15990, Java ] 1,2,3 더하기 5 (0) | 2020.11.07 |
[백준 11727, Java] 2×n 타일링 2 (0) | 2020.11.05 |
[백준 11726, Java] 2 Xn 타일링 (0) | 2020.11.05 |
[백준 1463, Java] 1로 만들기 (0) | 2020.11.04 |
Comments