일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 영어회화
- BFS
- 백트래킹 알고리즘
- 회화기초
- dfs
- 백준
- 백트래킹
- 일상회화
- 다이나믹프로그래밍
- Hyperledger Fabric
- 회화
- 영어 회화
- 정렬
- N-Queens
- 파이썬
- 라이브아카데미
- IF
- 완전탐색
- 전치사
- 영어
- python
- 관계절
- used to
- 영어회와
- 라이브 아카데미
- Backtracking Algorithm
- 알고리즘
- 블록체인
- 영어기초
- baekjoon
Archives
- Today
- Total
내 맴
[ 백준 ] 1003번 : 피보나치 함수 (파이썬) 본문
728x90
문제 )
https://www.acmicpc.net/problem/1003
[ 풀이 ]
문제를 읽어보고 그냥 재귀함수를 사용해서 문제를 풀되 fib(0)과 fib(1)이 얼마나 호출되는지 알아내게끔 코드를 변경하라는 건줄 알았다.
문제를 풀고 제출해보니 시간초과가 되어버렸다.
그래서 시간초과를 하지 않는 새로운 방법으로 문제를 풀어보았다.
바로 0과 1 호출 횟수에 대한 List를 만들어 Dynamic Programming으로 문제를 푸는 것이다
예를 들어 , fib(3)= fib(2)+fib(1) = fib(0) + fib(1) + fib(1) 로 fib(1)은 2번 fib(0)은 1번 호출되는 것을 볼수 있다.
- 동적 프로그래밍 ( Dynamic Programming) 이란?
✔ 입력 크기가 작은 부분 문제들을 모두 해결한 후에 그 해들을 이용해 큰 크기의 부분 문제들을 해결하여 최종적인 solution을 해결하는 Algorithm
✔ Bottom - up
- python code
def fibonacci(n):
count0=[1,0] # 0을 사용하는 횟수 list
count1=[0,1] # 1을 사용하는 횟수 list
for i in range(2,n+1):
count0.append(count0[i-1]+count0[i-2])
count1.append(count1[i-1]+count1[i-2])
return count0[n], count1[n]
T=int(input())
for i in range(T):
N=int(input())
sc0,sc1=fibonacci(N)
print(sc0,sc1)
728x90
'Algorithm > Baekjoon 문제풀이' 카테고리의 다른 글
[ 백준 ] 2606번 : 바이러스 (파이썬) (0) | 2020.06.20 |
---|---|
[ 백준 ] 1260번 : DFS와 BFS (파이썬) (0) | 2020.06.14 |
[ 백준 ] 2748번 : 피보나치 수 2 (파이썬) (0) | 2020.05.19 |
[ 백준 ] 2108번 : 통계학 (파이썬) (0) | 2020.05.18 |
[ 백준 ] 14889번 : 스타트와 링크 (파이썬) (0) | 2020.05.16 |