http://www.jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=228&sca=10d0
JUNGOL | 함수3 - 자가진단5 > 문제은행
첫 번째 수는 1이고 N번째 수는 (N/2)번째 수(파이썬인경우 N//2번째)와 (N-1)번째 수의 합으로 구성된 수열이 있다. 50 이하의 자연수 N을 입력받아 재귀호출을 이용하여 이 수열에서 N번째 수를 출력하는 프로그램을 작성하시오. (1 2 3 5 7 10 13 18 …)
www.jungol.co.kr
#include<bits/stdc++.h>
int f(int p)
{
if(p==1)return 1;
return f(p/2)+f(p-1);
}
int main()
{
int i,k,n;
scanf("%d",&n);
k=f(n);
printf("%d\n",k);
return 0;
}
위 코드는 입력 값 n이 커지면, 상당히 느려진다.
그래서 아래와 같이 메모이제이션을 적용하였다.
#include<bits/stdc++.h>
int c[1004]={0,};
int f(int p)
{
if(p==1){
return 1;
}
else if(c[p]!=0){
return c[p];
}
else{
c[p]=f(p/2)+f(p-1);
return c[p];
}
}
int main()
{
int i,k,n;
scanf("%d",&n);
k=f(n);
printf("%d\n",k);
return 0;
}
'정보올림피아드-KOI > 기초 문법 문제' 카테고리의 다른 글
589 : 함수3 - 자가진단3 (0) | 2020.02.16 |
---|---|
590 : 함수3 - 자가진단4 (0) | 2020.02.16 |
598 : 문자열1 - 자가진단6 (0) | 2020.02.16 |
231 : 함수3 - 형성평가1 (0) | 2020.02.16 |
232 : 함수3 - 형성평가2 (0) | 2020.02.16 |