백준 15841번 바로가기

첫 번째 풀이

import sys

def pibo(n):
  if n < 3:
    return 1
  else:
    return pibo(n-1) + pibo(n-2)

for i in sys.stdin:
  if (i:=int(i)) == -1:
    break
  cows = pibo(i)
  print(f"Hour {i}: {cows} cow(s) affected")

두 번째 풀이

import sys

cows = [1,1] + [0 for _ in range(490)]
for i in range(2, 491):
  cows[i] = cows[i-1] + cows[i-2]

for i in sys.stdin:
  if (i:=int(i)) == -1:
    break
  print(f"Hour {i}: {cows[i-1]} cow(s) affected")

CODE REVIEW

  1. 피보나치 수열만 구현할 수 있다면 쉽게 풀어낼 수 있는 문제였다.
  2. 영어로 된 문제였는데, 요약하자면 피보나치 수열로 늘어나는 감염된 소의 숫자를 구하라이다.
  3. 피보나치 수열을 함수로 구현했을 때 시간초과 문제가 발생하길래 미리 490 범위의 피보나치 수열을 구해두고 꺼내 쓰는 방식을 택했다.