프로그래밍

 3198, 1/160 회원가입  로그인  
   매혹
   http://omaggo.blog.me
   프로그래밍 코드를 여기서 어떻게 더 줄일수 있나요?

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=3268 [복사]


음 문제를 일단 주자면요

정수 n(1<=n<=90)이 입력되면 n번째 피보나치 수를 구해야 해요

시간제한은 1000ms입니다

우선 제가 짠 코드는 이렇거든요.?

#include <stdio.h>

long long Pibo( int n );

int main( void )
{
int n;
scanf( "%d", &n );

printf( "%lld \n", Pibo(n) );
return 0;
}

long long Pibo( int n )
{
long long piboNum;

if( n == 1 || n == 2 )
  return 1;
else if( n == 3 )
  return 2;
else if( n == 4 )
  return 3;

return piboNum =3*Pibo(n-3) + 2*Pibo(n-4)
}

저는 제귀함수로 짜봣는데 이게 356byte입니다.

근데 어떤 친구는 보면 125byte로 코드를 짯더군요..

열등감이 느껴지는거 있죠 ㅠㅠ 과학고 개뇬들 ㅠ



저는 최대한 생각을 짜내서 하긴 했는데 코드길이가 너무기네요

어떻게 하면 코드를 더 다듬을 수 있을까요?

  Hit : 5808     Date : 2012/01/10 09:39



    
매혹 아 참고로 문제에서 재귀함수로 짜라고 조건이 주어졌네요 2012/01/10  
rocket07 함수는 가끔 시간을 늘려버리는 경우도 있다고 들었어여ㅇㅅㅇ 2012/01/11  
Prox 일단 Pibo 함수에서...

if( n == 1 || n == 2 )
return 1;
return piboNum =Pibo(n-1) + Pibo(n-2)

위와 같이 줄이기만 해도 함수가 정상적으로 작동합니다 (저게 피보나치의 정의니까요)

조금더줄이자면
return (n==1||n==2)?(1):(Pibo(n-1) + Pibo(n-2));
2012/01/11  
Prox 참고로 a?b:c 는 if(a){b}else{c} 를 뜻하는 c언어 문법입니다 2012/01/11  
xzvsda 코드를 줄이는게 아니라 시간 복잡도를 줄여야지요.. 2012/01/11  
매혹 시간제한이 있어서 Prox님처럼 그렇게 하면 시간초과가 떠요 ㅠ.. 시간제한이 있어서리.... 그래서 저렇게 코드를 짠거에요,. 2012/01/11