알고리즘/백준

백준 2193_이친수

래울 2020. 8. 17. 10:46

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

 

2193번: 이친수

0과 1로만 이루어진 수를 이진수라 한다. 이러한 이진수 중 특별한 성질을 갖는 것들이 있는데, 이들을 이친수(pinary number)라 한다. 이친수는 다음의 성질을 만족한다. 이친수는 0으로 시작하지 않

www.acmicpc.net

 

손으로 끄적거리다보면 피보나치수열과 비슷함을 알 수 있다.

1 1 2 3 5 7 ...

#include <stdio.h> 
int main(){ 
    int i,n; 
    int result=1, a=1, b=1; 
    scanf("%d",&n); 
    for(i=2;i<n;i++){ 
        result=a+b; 
        b=a; 
        a=result; 
    } 
    printf("%d\n", result); 
    return 0; 
}

하지만, 위와 같이 제출하면 "틀렸습니다." 가 나오게된다.

문제에서 준 범위값 1<=N<=90에서 N이 47이되면 int형의 최대값을 넘어가, 오답이 되게된다.

 

 

따라서

#include <stdio.h> 
int main(){ 
    int i,n; 
    long result=1, a=1, b=1; //int -> long
    scanf("%d",&n); 
    for(i=2;i<n;i++){ 
        result=a+b; 
        b=a; 
        a=result; 
    } 
    printf("%ld\n", result); 
    return 0; 
}

로 수정하면된다.