n번째에 해당하는 피보나치 수를 구하는 문제입니다.
피보나치 수열의 개념을 알고리즘으로 표현하여 코드를 구현하면 될 것 같네요. 재귀함수를 이용하였습니다.
#include <stdio.h>
int f(int n){
if(n<=1) return n; //1항은 1 반환
else return f(n-1)+f(n-2); //항들의 합
}
int main(){
int n; //수 입력
scanf("%d", &n);
printf("%d",f(n)); //결과 출력
}
C로만 구현해보기 아쉬워서 파이썬으로도 구현해 보았습니다.
a={} //리스트 선언
def f(n):
if n<=1: //1항은 1 반환
return n
if n in a: //리스트에 이미 저장된 수 반환
return a[n]
else:
a[n]=f(n-1)+f(n-2) //리스트에 계산값 넣기
return a[n]
n= int(input()) //입력
result= f(n)
print(result) //결과 출력
파이썬으로 구현할때 C로 구현할때와 같은 방식으로 재귀함수만을 사용하였더니 시간초과가 났습니다. 이 문제를 해결하기 위하여 메모이제이션을 사용하였는데요. 리스트를 만들어서 리스트에 이미 그 수에 해당하는 값이 있으면 그 값을 반환하고 리스트에 없는 값만 계산하는 방식으로 시간을 줄일 수 있었습니다.
읽어주셔서 감사합니다.
'AP 프로그래밍' 카테고리의 다른 글
16. codeup 4503 : 바이러스 문제 해결 (0) | 2023.07.16 |
---|---|
13. codeup 3701 : 파스칼 삼각형 문제 해결 (1) | 2023.06.05 |
9. codeup 2641 : 숏다리의 계단 오르기 (Small) 문제 해결 (0) | 2023.05.28 |
8. codeup 2608 : 동아리 회장 선거 문제 해결 (0) | 2023.05.28 |
5. codeup 2062 : Up 2 문제 해결 (0) | 2023.04.03 |