int라는 자료형은 -2,147,483,648 ~ 2,147,483,647 까지의 값만을 표현할 수가 있는데,
만약 2,147,483,647이라는 값을 가지고 있는 int형 숫자에 1을 더하게 되면 2,147,483,648이 나오는게 아니라 -2,147,483,648이 나오게 된다 === 이것의 의미는 각 자료형의 범위가 넘어가게되면 예상하지 못한 결과가 나오게 된다는 의미이다!!!
다시 문제 이야기로 돌아가면 피보나치의 수는 커지는 속도가 아주 빠르다. 44번째만 되도 int의 범위를 넘어버린다고 한다. 여태까지의 설명을 빗대어보면 대충 int값을 넘어가면 예상하지 못한 결과가 나온다는 의미이다.
여기서 사용한 성질이 있다
( A + B ) % C = ( ( A % C) + ( B % C ) ) % C
이러한 과정이기 때문에 문제에서 다음 피보나치 계산으로 넘어가기 전에 처리를 해준 부분이다.
즉 문제에서 어려우라고 껴둔게 아니라 int의 범위 내에 항상 값이 있도록 보장해주는 부분이다!!
class Solution {
public int solution(int n) {
int answer = 0;
answer = recur(n)%1234567;
return answer;
}
public int recur(int num){
if(num == 0) return 0;
else if(num == 1) return 1;
else{
return recur(num-1)+recur(num-2);
}
}
}
class Solution {
public int solution(int n) {
int answer = 0;
answer = recur(n);
return answer;
}
public int recur(int num){
int a=1, b=1;
int result = 0;
if(num==2 || num==3)
result = 1;
for(int i=3; i<=num; i++){
result = a+b;
a = b % 1234567;
b = result % 1234567;
}
return result % 1234567;
}
}