https://www.acmicpc.net/problem/1003
처음 코드 - 걍 냅다 계산..
당연히 시간 초과 날 줄 알았음
def fib(n):
d = [0] * (n + 1)
if n == 0:
count[0] += 1
return 1
if n == 1:
count[1] += 1
return 1
d[n] = fib(n - 1) + fib(n - 2)
return d[n]
t = int(input())
for i in range(t):
n = int(input())
count = [0, 0]
fib(n)
print(count[0], count[1])
규칙을 찾았다
피보나치가 fib(n) = fib(n-1) + fib(n-2) 니까
전 계산 결과를 저장해서 불러오면 된다
d = [[0, 0] for _ in range(41)]
d[0] = [1, 0]
d[1] = [0, 1]
for i in range(2, 41):
d[i][0] = d[i-1][0] + d[i-2][0]
d[i][1] = d[i-1][1] + d[i-2][1]
t = int(input())
for i in range(t):
n = int(input())
print(d[n][0], d[n][1])
n의 범위가 40까지밖에 안 되기 때문에 테스트 케이스마다 값을 계산하지 않고
처음에 미리 0~40까지의 계산을 모두 끝내놓고 결과를 실행함
'알고리즘 > 백준' 카테고리의 다른 글
백준 9461: 파도반 수열 (Python) (0) | 2022.03.29 |
---|---|
백준 1904: 01타일 (Python) (0) | 2022.03.29 |
백준 1300: K번째 수 (Python) (0) | 2022.02.23 |
백준 2110: 공유기 설치 (Python) (0) | 2022.02.14 |
백준 2805: 나무 자르기 (Python) (0) | 2022.02.12 |