alpyrithm_알파이리즘

[알고리즘][Python] 백준(BOJ) 1788 피보나치 수의 확장_파이썬 본문

Algorithm/백준 알고리즘_Python

[알고리즘][Python] 백준(BOJ) 1788 피보나치 수의 확장_파이썬

알파이 2020. 10. 20. 08:04

 

1788 피보나치 수의 확장    www.acmicpc.net/problem/1788

 

1788번: 피보나치 수의 확장

첫째 줄에 F(n)이 양수이면 1, 0이면 0, 음수이면 -1을 출력한다. 둘째 줄에는 F(n)의 절댓값을 출력한다. 이 수가 충분히 커질 수 있으므로, 절댓값을 1,000,000,000으로 나눈 나머지를 출력한다.

www.acmicpc.net

 

 

 

문제 풀기 전 공부할 것 : 수학, 다이나믹 프로그래밍

 

 

 

 

 

 

 

풀이

<내용>

  • n을 양수, 0, 음수일 때 나눠서 계산한다.
  • n이 양수일 때, 1, 1, 2, 3, 5, 8, 13, ... 으로 피보나치 수이다.
  • n이 음수일 때, 1, -1, 2, -3, 5, -8, ... 으로 피보나치 수이다.
  • n이 양수라고 가정하고 피보나치 배열을 구한다.
  • n이 음수일 때 그리고 2로 나누어 떨어진다면 첫 줄에 -1을 출력하고 아니라면 1을 출력한다.

 

 

<코드>

n = int(input())
flag = 0
if n > 0:
    flag = 1
elif n < 0:
    flag = -1
    
dp = [0, 1]
for _ in range(2, abs(n)+1):
    dp.append((dp[-1]+dp[-2])%1000000000)

if flag == -1:
    if (-n) % 2 != 0:
        flag = -flag

print(flag)
print(dp[abs(n)])

 

 

 

 

 

 

 

반응형
Comments