1003. 피보나치 함수
https://www.acmicpc.net/problem/1003
1003번: 피보나치 함수
각 테스트 케이스마다 0이 출력되는 횟수와 1이 출력되는 횟수를 공백으로 구분해서 출력한다.
www.acmicpc.net
내 풀이 - 성공
from sys import stdin
import collections
T = int(stdin.readline())
dp = collections.defaultdict(list)
dp[0] = [1, 0]
dp[1] = [0, 1]
def func(n):
if n in dp:
return dp[n]
else:
a = func(n-1)
b = func(n-2)
dp[n] = [a[0]+b[0], a[1]+b[1]]
return dp[n]
for t in range(T):
N = int(stdin.readline())
dp[N] = func(N)
print(dp[N][0], dp[N][1])
이런 재귀 문제는 시간 초과 나기 쉽상이기 때문에
dp 를 이용해야겠다고 판단했다.
딕셔너리 dp 에 [0 출력횟수, 1 출력횟수] 의 형태로 저장해줬다.
우선 고정 값인 0 과 1 에 대한 값은 직접 넣어주고
나머지는 재귀 돌면서 채워갔다.
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 1012. 유기농 배추 - python3 (0) | 2022.06.15 |
---|---|
[백준] 1043. 거짓말 - python3 (0) | 2022.06.12 |
[백준 - SILVER 5] 11723. 집합 - C++ (0) | 2022.03.11 |
[백준 - BRONZE 2] 15829. Hashing - C++ (0) | 2022.03.11 |
[백준 - SILVER 1] 11403. 경로 찾기 - C++ (0) | 2022.03.10 |
댓글