https://www.acmicpc.net/problem/24416
- 예제 입력1
5
- 예제 출력1
5 3
- 예제 입력2
30
- 예제 출력2
832040 28
- 문제 접근
- 재귀 호출 피보나치 수열과 동적 프로그래밍 피보나치 수열의 연산 횟수 계산
- 문제 해결
- 2개의 함수를 만들어서 각각 카운팅 값을 출력
- 슈도 코드
static recursionFiboCnt
static dpFiboCnt
N (피보나치 수열의 N번째 값)
recursionFibo(N)
dpFiboCnt(N)
recursionFiboCnt 출력
dpFiboCnt 출력
recursionFibo(N){
if(N이 1 또는 2면) {
1 반환
recursionFiboCnt 1증가
}
recursionFibo(N-1) + recursionFibo(N-2) 반환
}
dpFiboCnt(N){
f[N+1] 배열 선언
f[1] = 1, f[2] = 1
for(i=3 ~ N까지 반복){
f[i] = f[i-1] + f[i-2] 저장
dpFiboCnt 1증가
}
f[N] 반환
}
- 코딩하기
static int recursionFiboCnt = 0;
static int dpFiboCnt = 0;
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int N = scan.nextInt();
recursionFibo(N);
dpFibo(N);
System.out.println(recursionFiboCnt + " " + dpFiboCnt);
}
private static int recursionFibo(int n) {
if(n == 1 || n == 2){
recursionFiboCnt++;
return 1;
}
return recursionFibo(n-1) + recursionFibo(n - 2);
}
private static int dpFibo(int n) {
int[] f = new int[n+1];
f[1] = 1; f[2] = 1;
for(int i = 3; i <= n; i++){
f[i] = f[i-1] + f[i-2];
dpFiboCnt++;
}
return f[n];
}
'Coding Test > Problem Number' 카테고리의 다른 글
[Java] 회사에 있는 사람 [7785번] (0) | 2024.07.19 |
---|---|
[Java] 수 이어 쓰기 1 [1748번] (0) | 2024.07.19 |
[Java] 칸토어 집합 [4779번] (0) | 2024.07.19 |
[Java] 재귀함수가 뭔가요? [17478번] (0) | 2024.07.19 |
[Java] 반복 수열 [2231번] (0) | 2024.07.18 |