반응형

백준 10870번 문제입니다. (solved.ac)기준 브론즈 2문제입니다.

https://www.acmicpc.net/problem/10870

 

10870번: 피보나치 수 5

피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다. 이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n ≥ 2)가

www.acmicpc.net

0 혹은 자연수인 n을 입력받아 n번째 피보나치 수를 출력하는 문제입니다. n번째 피보나치 수는 n-1 번째 피보나치 수 + n-2번째 피보나치 수 입니다.

 0번째 피보나치 수는 0이고 1번째 피보나치 수는 1입니다. 따라서 2번째 피보나치 수는 1 + 0으로 1이며 3번째 피보나치 수는 1 + 1로 2입니다... 이 과정을 반복하여 n번째  피보나치 수를 구하는 문제입니다. 간단하게 DP(다이나믹 프로그래밍)으로 접근하였습니다.

 처음에 문제를 제대로 읽지 않아서 0또한 입력값인 줄 모르고 아래와 같은 코드로 제출했다가 100%에서 런타임 에러(IndexError)가 발생했었습니다.

n = int(input())

d = [0] * (n+1)
d[1] = 1

for i in range(2, n+1):
    d[i] = d[i-1] + d[i-2]

print(d[n])

 위의 코드에서는 n에 입력값으로 0이 들어오면 4번째 줄에 있는 d[1] = 1부분이 잘못된 인덱스로 인덱스 에러가 발생합니다.

저는 간단하게 if문을 사용하여 n이 0이 아닐때만 위의 코드처럼 작동하고 그 외의 경우에는(n이 0이라면) 0번째 인덱스 값인 0을 출력만 하도록 변경하였습니다.

# n번째 피보나치 수를 출력해야 하므로 n을 입력받음
n = int(input())

# n이 0이 아니면
if n != 0 :
    
    d = [0] * (n+1)
    d[1] = 1

    # 다이나믹 프로그래밍 기법을 사용하여 피보나치 수를 구함.
    for i in range(2, n+1):
        d[i] = d[i-1] + d[i-2]

    print(d[n])
# n이 0 이라면
else :
    print(0)
반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기