일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- Backtracking Algorithm
- 영어
- 백준
- 일상회화
- python
- 라이브 아카데미
- 정렬
- 영어기초
- 회화
- 영어회와
- N-Queens
- 관계절
- 영어회화
- 완전탐색
- 백트래킹 알고리즘
- BFS
- 파이썬
- 회화기초
- used to
- dfs
- 전치사
- IF
- 라이브아카데미
- 백트래킹
- 영어 회화
- 다이나믹프로그래밍
- 알고리즘
- 블록체인
- baekjoon
- Hyperledger Fabric
Archives
- Today
- Total
내 맴
[ 백준 ] 2748번 : 피보나치 수 2 (파이썬) 본문
728x90
문제 )
https://www.acmicpc.net/problem/2748
[ 풀이 ]
피보나치 수열의 경우 재귀함수를 사용하면 안되는 대표적인 문제이다.
재귀함수를 사용하게 되면 중복호출이 매우 많아지기 때문이다.
재귀 알고리즘을 이용해 피보나치 수를 구하려면 의사코드는 이런식으로 작성된다
이때, 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 |