일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 백준
- 우선순위큐
- 프로그래머스
- 소수찾기
- 인프런
- 파이썬
- 그리디 알고리즘
- 소수판별
- pypy3
- c#
- 브루투포스
- appendleft
- Python
- 합 구하기
- 누적합
- C#강의
- 1일1솔
- DP
- 완전탐색
- mvc
- BFS
- spring
- python3
- Java
- LCM
- 연관관계
- JPA
- popleft
- deque
- unity
Archives
- Today
- Total
jae_coding
[1day 1sol] 피보나치 수 5 본문
반응형
문제
https://www.acmicpc.net/problem/10870
10870번: 피보나치 수 5
피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다. 이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n ≥ 2)가
www.acmicpc.net
구현
- Fn = Fn-1 + Fn-2 (n ≥ 2)
- 피보나치 함수 구현
- 함수를 구현하는데 메모리 최적화와 시간을 줄이기 위해서 dictionary를 이용해서 연산과정의 시간을 줄일 수 있었다.
- 물론 n이 20이하의 자연수라 시간초과는 딕셔너리를 사용하지 않아도된다.
- 하지만 추후 메모리 문제와 시간초과를 관리해주는 것이 좋다.
코드
import sys
input = sys.stdin.readline
# Fn = Fn-1 + Fn-2 (n >= 2)
def fib(n, memo):
if n == 0:
return 0
elif n == 1:
return 1
else:
if n not in memo:
memo[n] = fib(n-1, memo) + fib(n-2, memo)
return memo[n]
else:
return memo[n]
num = int(input())
dictionary = dict()
print(fib(num, dictionary))
느낀점
재귀 함수를 구현하여 반복적인 코드를 줄임으로써, 코드의 양을 줄일 수 있었다. 또한 딕셔너리를 활용하여 시간초과와 메모리 문제를 일으킬 경우의 수까지 생각할 수 있는 문제였다. 단순한 구현이 아닌 최적화에도 신경쓸 수 있는 개발자가 되어야겠다.
반응형
'알고리즘 문제 > one_day_one_sol' 카테고리의 다른 글
[1day 1sol]피보나치 함수 (0) | 2022.08.31 |
---|---|
[1day 1sol] 최소힙 (0) | 2022.08.31 |
[1day 1sol] 점프왕 쩰리 (Small) (0) | 2022.08.31 |
[1day 1sol] 그룹 단어 체커 (0) | 2022.08.30 |
[1day 1sol] A+B - 7 (0) | 2022.08.30 |
Comments