Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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: Shortest Reach in a Graph
- 격파르타 후기
- 코딩테스트
- DFS: Connected Cell in a Grid
- 백준
- 프로그래머스
- Interview Preparation Kit
- Recursion: Davis' Staircase
- 격파르타 합격후기
- 야근지수
- 머신러닝
- 격파르타 장점
- candies
- Roads and Libraries
- hackerrank
- Find the nearest clone
- 매칭점수
- Special String Again
- 구슬탈출2
- Algorithm
- 알고리즘
- 파이썬
- python
- [sqld]자격증합격
- Max Array Sum
- 해커랭크
- Reverse Shuffle Merge
- programmers
- Common Child
Archives
- Today
- Total
Archive
[BOJ] 1003. 피보나치 함수 본문
풀이
-
메모이제이션 문제
-
0, 1의 개수 정보를 글로벌 변수로 선언해 입력값 들어왔을 때 기존에 계산한 정보 있으면 바로 리턴해줌.
-
그리고 계산정보 없을경우 이전 개수 정보를 기반으로 최소한의 계산만 수행해 시간을 단축
# global 변수로 0, 1 카운트 정보 놔둠
zero = [1, 0]
one = [0, 1]
def solution(n):
# 입력값 n이 이전 정보에 있을 경우 -> 바로 값을 리턴함.(중복계산 방지)
if n <= len(zero) - 1:
print(f"{zero[n]} {one[n]}")
else:
# n이 len(zero)보다 크니까 n-len(zero)번만 계산해주면 됨
for i in range(len(zero), n+1):
zero.append(zero[i-1] + zero[i-2])
one.append(one[i-1] + one[i-2])
# 계산 다 끝나면 해당 정보를 리턴
print(f"{zero[n]} {one[n]}")
n = int(input())
for _ in range(n):
m = int(input())
solution(m)
'공부 > Algorithm' 카테고리의 다른 글
[BOJ] 12100번. 2048(Easy) (0) | 2021.02.21 |
---|---|
[BOJ] 13460번. 구슬탈출2 (0) | 2021.02.21 |
[BOJ] 10451. 순열 사이클 (0) | 2021.02.14 |
[BOJ] 2178. 미로탐색 (0) | 2021.02.07 |
[BOJ] 1303. 전쟁-전투 (0) | 2021.02.07 |
Comments