문제

https://www.acmicpc.net/problem/1003

걸린 시간

00 : 14 : 26

풀이

Python3

dic = {}

def fib(n):
    result = [0, 0]
    if n in dic:
        return dic[n]

    if n == 0:
        result[0] += 1    
        dic[n] = result
        return result
    elif n == 1:
        result[1] += 1
        dic[n] = result
        return result
    else:
        left = fib(n-1)
        right = fib(n-2)
        result[0] = left[0] + right[0]
        result[1] = left[1] + right[1]
        dic[n] = result
        return dic[n] 

if __name__ == "__main__":
    T = int(input())

    result = []

    for _ in range(0, T):
        n = int(input())
        result.append(fib(n))

    for i in result:
        print(i[0], i[1])

피보나치 수열을 순서대로 출력하는 것이 아닌 0과 1의 개수를 기록하는 리스트의 값을 증가시켜 해당 리스트를 반환한다.

딕셔너리(메모이제이션)에 기록되는 값도 마찬가지로 result 리스트이다.

'Baekjoon' 카테고리의 다른 글

Baekjoon 7662번 이중 우선순위 큐  (0) 2020.08.10
Baekjoon 11724번 연결 요소의 개수  (0) 2020.08.10
Baekjoon 11273번 집합  (0) 2020.08.10
Baekjoon 7576번 토마토  (0) 2020.08.10
Baekjoon 18870번 좌표 압축  (0) 2020.08.09

댓글