반응형
백준 10870번 문제입니다. (solved.ac)기준 브론즈 2문제입니다.
https://www.acmicpc.net/problem/10870
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)
반응형
'알고리즘 문제풀이[Algorithm]' 카테고리의 다른 글
[백준] 2805번 나무 자르기(파라메트릭 서치)(Python - 파이썬) (0) | 2022.02.03 |
---|---|
[백준] 11866번 요세푸스 문제 0(Python - 파이썬) (0) | 2022.02.02 |
[백준] 2110번 공유기(파라메트릭 서치)(Python - 파이썬) (0) | 2022.01.31 |
[백준] 1085번 직사각형에서 탈출(Python - 파이썬) (0) | 2022.01.30 |
[백준] 1654번 랜선 자르기(파라메트릭 서치)(Python - 파이썬) (0) | 2022.01.28 |
최근댓글