본문 바로가기

Programmers/Level2

피보나치 수

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Solution {
    public long solution(long n) {
        long answer = 0;
        long a = 0, b = 1, cnt = 1;
        while (cnt < n) {
            a += b % 1234567;
            b += a % 1234567;
            cnt += 2;
        }
        if (cnt == n)
            answer = b % 1234567;
        else
            answer = a % 1234567;
        return answer;
    }
}
cs

n번째 피보나치의 수를 1234567로 나눈 값을 구하는 문제이다.

피보나치의 수는 급격하게 늘어나므로 n번째 값에 도달할 때 자료형의 범위를 초과할 수 있다.

그렇기에 a, b를 구하는 과정에서 % 1234567을 수행하고, 최종 값을 구할 때에도 % 1234567을 수행해야 한다.

모듈러 연산의 (A + B) % C ≡ ( ( A % C ) + ( B % C) ) % C 성질을 이용한 것이다.

'Programmers > Level2' 카테고리의 다른 글

이진 변환 반복하기  (0) 2021.07.31
올바른 괄호  (0) 2021.07.31
N개의 최소공배수  (0) 2021.07.30
땅따먹기  (0) 2021.07.30
스킬트리  (0) 2021.07.30