티스토리 뷰
백준 1003번 : 피보나치 함수
#include <stdio.h> //동적게획법 문제이다.
int fibo[41][3] = {0, }; //[][0] : 피보나치 수, [][1] : return 0; 개수, [][2] : return 1 개수
int input = 0; //입력받기 위한 변수
int find(int n)
{
fibo[0][1] = 1;
fibo[1][2] = 1;
if(n==0) return 0;
if(n==1) return 1;
if(fibo[n][0] == 0) fibo[n][0] = find(n-1) + find(n-2); //피보나치 수를 찾는다!
if(fibo[n][1] == 0) fibo[n][1] = fibo[n-1][1] + fibo[n-2][1]; //덤으로 return 0;
if(fibo[n][2] == 0) fibo[n][2] = fibo[n-1][2] + fibo[n-2][2]; //덤으로 return 1;
}
int main(void)
{
int t = 0; //몇 개
scanf("%d", &t); //몇 개?
while(t>0)
{
scanf("%d", &input); //몇번째 ?
find(input); //재귀함수 가동
printf("%d %d\n", fibo[input][1], fibo[input][2]); //출력
t--; //횟수감소
}
return 0;
}
동적 계획법 :처음 진행한 연산을 기록!!!! -> 똑같은 걸 여러 번 하지 않으니 시간이 빨라진다.
- 조건
1. 몇 번째 피보나치수를 구할 때, 재귀 함수에서 n=0일 때와, n=1일 때를 얼마나 지나치는 가?
- 풀이
피보나치 수를 구하는 재귀함수에서, n=0, n=1을 얼마나 지나갔는지를 추가했다.
fibo[0][1] = 1; //n=0일 때 return 0;을 한 번 지남
fibo[1][2] = 1; //n=1일 때 return 1;을 한 번 지남
if(fibo[n][1] == 0) //처음에는 값을 대입하되, 이를 저장, 그다음부터는 더 이상 대입하지 않아도 됨.
if(fibo[n][2] == 0)
- 예
find(4) | ||||||
find(3) | find(2) | |||||
find(2) | find(1) | find(1) | find(0) | |||
find(1) | find(0) | |||||
피보나치 수 |
입력
1
4
과정 (좌->우, 그 다음 위-> 아래)
find(4) 시작 | find(3) | find(2) | find(1) |
find(0) | |||
find(1) | |||
find(2) | find(1) | ||
find(0) | |||
find(4) 종료 |
여기서 fino[2][0], fino[2][1], fino[2][2]값이 구해지고 저장된다.
여기선 대입이 일어나지 않는다. 즉 다시 fino[2][0], fino[2][1], fino[2][2]을 구하지 않는다.
출력
2 3
'c언어 > BAEKJOON' 카테고리의 다른 글
c언어 10997번 별 찍기 - 22 (백준) (0) | 2022.04.30 |
---|---|
c언어 2580번 스토쿠 (백준) (0) | 2022.04.16 |
c언어 2447번 별찍기 - 10 (백준) (0) | 2022.04.10 |
c언어 20055번 컨테이어 벨트 위의 로봇 (백준) (0) | 2022.04.09 |
c언어 13458번 시험감독 (백준) (0) | 2022.04.09 |
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 세그먼트 트리
- DP
- 그래프
- 1835
- 오프라인 쿼리
- DFS
- BFS
- 최대공약수
- 스택
- Krustal
- Mo.s
- C언어
- 6198번
- 그리디
- find
- 백준
- 플로이드
- 6198
- 정렬
- C++
- 16120번
- java
- 덱
- 최소 스패닝 트리
- 누적합
- 1835번
- 트리
- 누적 합
- 카드
- union
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함