일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 심리여행
- 심리학
- javap
- bytecode
- Recylcer
- 여행계획
- throws
- 취약점
- jvm
- opcode
- 일상탈출
- Shared Elements
- ㅇ
- HelloWorld
- 여행
- Navigation Component
- static
- Transition
- 버킷리스트
- 보안
- 치유
- bytecode 분석
- abstract
- Android
- extends
- 보안취약점
- Interface
- 일상회피
- IMPLEMENT
- 회피
Archives
- Today
- Total
패스트터틀
(Baekjoon) dp - (4) 피보나치 본문
https://www.acmicpc.net/problem/2747
dp문제의 가장 기본이 되는 피보나치이다.
점화식을 재귀함수로 어떤식으로 표현할수있느냐도 알수있는 핵심문제이다.
A(n) = A(n-2) + A(n-1) 의 점화식이 있을경우
int fibonacci(int n) {
if (n == 0) {
printf("0");
return 0;
} else if (n == 1) {
printf("1");
return 1;
} else {
return fibonacci(n‐1) + fibonacci(n‐2);
}
}
다음과 같은 재귀함수로 구할수 있다.
하지만 한번구한값은 다시 구하지 말자 의 동적계획법을 사용하지 않을경우 시간이 너무 많이 소요된다.
다음과 같이 메모리에 값을 저장하고 값이 존재한다면 더이상 계산하지 않는 식으로 계산시간을 단축할수있다.
package dp;
import java.util.Arrays;
import java.util.Scanner;
public class _1003{
static int pibo_mem[] = new int[100];
public static int pibo(int n){
if( pibo_mem[n] != -1)
return pibo_mem[n];
if( n < 2 )
pibo_mem[n] = n;
else
pibo_mem[n] = pibo(n-1) + pibo(n-2);
return pibo_mem[n];
}
public static void main(String args[]){
Arrays.fill(pibo_mem, -1);
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
System.out.println(pibo(a));
}
}
백준문제풀이Github :
https://github.com/sdk0213/baekjoon-study
'Algorithm > baekjoon' 카테고리의 다른 글
(Baekjoon) dp - (6) 타일 채우기 3 (0) | 2019.12.02 |
---|---|
(Baekjoon) dp - (5) 타일 채우기 (0) | 2019.11.29 |
(Baekjoon) dp - (3) 외판원 순회 (0) | 2019.11.22 |
(Baekjoon) etc.. - (1) 이진수 연산 (0) | 2019.11.21 |
(Baekjoon) dp - (2) 2×n 타일링 2 (0) | 2019.11.20 |
Comments