본문 바로가기
알고리즘/백준

[백준] 1003. 피보나치 함수 - python3

by 풍파 2022. 6. 12.

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 에 대한 값은 직접 넣어주고

나머지는 재귀 돌면서 채워갔다.

 

댓글