백준/DP
[dp/백준] 1003번: 피보나치 함수(2차)
ydin
2022. 5. 30. 16:33
-문제: https://www.acmicpc.net/problem/1003
-정답 풀이
0을 담는 배열과, 1을 담는 배열을 따로 초기화 한 후 이들끼리 피보나치 수열을 진행하면 된다고 생각했다
f(n)=f(n-1)+f(n-2)
점화식 값을 삽입하는 형태로 했는데, 틀린 답이 나왔다. python tutor를 돌려보니 길이가 22일 때, len(one),len(zero)의 값이 27이 되었으며, 틀린 답을 출력했다.
length=len(zero)
if length <= n 부분을 입력하지 않아서 틀렸던 것 같은데, 아직 이유를 잘 모르겠다.
t=int(input())
zero=[1,0,1]
one=[0,1,1]
for _ in range(t):
n=int(input())
length=len(zero)
if length <= n:
for i in range(length,n+1):
zero.append(zero[i-2]+zero[i-1])
one.append(one[i-1]+one[i-2])
print(zero[n],one[n])
-틀린 풀이
t=int(input())
zero=[1,0]
one=[0,1]
for _ in range(t):
n=int(input())
for i in range(2,n+1):
zero.append(zero[i-2]+zero[i-1])
one.append(one[i-1]+one[i-2])
print(zero[n],one[n])