일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Hyperledger Fabric
- 내가 듣기로는
- 영어기초
- 회화기초
- baekjoon
- 라이브아카데미
- 영어회화
- 라이브 아카데미
- Backtracking Algorithm
- BFS
- 영어 회화
- dfs
- from what i hear
- 다이나믹프로그래밍
- 영어
- 전치사
- 파이썬
- 백트래킹 알고리즘
- IF
- N-Queens
- 영어회와
- 회화
- 완전탐색
- 백준
- 백트래킹
- 관계절
- python
- 일상회화
- 정렬
- 알고리즘
Archives
- Today
- Total
내 맴
[ 백준 ] 2748번 : 피보나치 수 2 (파이썬) 본문
728x90
문제 )
https://www.acmicpc.net/problem/2748
2748번: 피보나치 수 2
문제 피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다. 이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n>=2)��
www.acmicpc.net
[ 풀이 ]
피보나치 수열의 경우 재귀함수를 사용하면 안되는 대표적인 문제이다.
재귀함수를 사용하게 되면 중복호출이 매우 많아지기 때문이다.
재귀 알고리즘을 이용해 피보나치 수를 구하려면 의사코드는 이런식으로 작성된다
이때, Fib함수가 얼마나 호출되는지 보기 위해서 그래프로 그려보았다.
재귀함수를 이용해 피보나치 수를 구하면 그래프의 분홍색 동그라미 친 부분 뿐만아니라 많은 부분들을 계속 계산해야한다. 중복계산을 반복하기 때문에 solution을 구하는데 오랜시간이 걸린다.
그러므로 동적 프로그래밍 알고리즘을 사용해서 중복계산을 하지 않고 solution을 구해주었다.
- 동적 프로그래밍 ( Dynamic Programming) 이란?
✔ 입력 크기가 작은 부분 문제들을 모두 해결한 후에 그 해들을 이용해 큰 크기의 부분 문제들을 해결하여 최종적인 solution을 해결하는 Algorithm
✔ Bottom - up
동적프로그래밍을 이용해 피보나치 수를 구할때의 의사코드는 이와 같다.
- python code
def Pibonacci(n):
F=[0,1]
for i in range(2,n+1):
F.append(F[i-1]+F[i-2])
return F[n]
N=int(input())
print(Pibonacci(N))
728x90
'Algorithm > Baekjoon 문제풀이' 카테고리의 다른 글
[ 백준 ] 1260번 : DFS와 BFS (파이썬) (0) | 2020.06.14 |
---|---|
[ 백준 ] 1003번 : 피보나치 함수 (파이썬) (0) | 2020.05.22 |
[ 백준 ] 2108번 : 통계학 (파이썬) (0) | 2020.05.18 |
[ 백준 ] 14889번 : 스타트와 링크 (파이썬) (0) | 2020.05.16 |
[ 백준 ] 14888번 : 연산자 끼워넣기 (파이썬) (0) | 2020.05.14 |