백준 1788번 바로가기

나의 풀이

n = int(input())

def fibo(n):
  a,b=0,1
  for i in range(n):
    a,b=b,(a+b)%1000000000
  return a

if n < 0:
  print(-1 if (-n)%2==0 else 1)
  print(fibo(-n))
elif n == 0:
  print(0)
  print(0)
else:
  print(1)
  print(fibo(n))

CODE REVIEW

  1. 원래는 n이 입력되면 [0]*(2*n+1)에 해당하는 array를 만들고 짝수 index에는 양수 피보나치 수열을, 홀수 index에는 음수 피보나치 수열을 저장해 문제를 해결하고자 했다.
    • 그런데 n의 값이 1,000,000이므로 recursion error가 발생할 우려도 있고,
    • 규칙성이 생각보다 단순해서 굳이 이 아이디어 대신 규칙성을 활용하였다.