본문 바로가기

코딩테스트/programmers

피보나치 수

https://school.programmers.co.kr/learn/courses/30/lessons/12945

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

n번째 피보나치 수를 1234567로 나눈 나머지를 구하는 문제다.

 

피보나치 수를 구하는 방법엔 여러 방법이 있겠지만 배열을 사용했다.

 

n의 범위를 고려하지 않고 처음엔 int형을 사용했다.

public int useInt(int n) {
    int[] fib = new int[n+1];
    fib[1] = 1;
    fib[2] = 1;
    for (int i = 3; i <= n; i++) {
        fib[i] = (fib[i - 1] + fib[i-2]);
    }

    return fib[n]%1234567;
}

 

테스트7부터 테스트 케이스를 통과하지 못한다.

Long으로 바꾸면 될까 했지만 n의 범위가 워낙 큰 탓에 될리는 없고,

 

int[]를 사용하면서, 배열에는 피보나치 수가 아닌 피보나치 수를 1234567로 나눈 나머지를 저장하는 방식으로 수정했다.

(대충 생각해보면 (a % c) + (b % c) = (a + b) % c)

public int useInt(int n) {
    int[] fib = new int[n+1];
    fib[1] = 1;
    fib[2] = 1;
    for (int i = 3; i <= n; i++) {
        fib[i] = (fib[i - 1] + fib[i-2])%1234567;
    }

    return fib[n];
}

 

'코딩테스트 > programmers' 카테고리의 다른 글

카펫  (0) 2023.09.18
짝지어 제거하기  (0) 2023.09.18
다음 큰 숫자  (0) 2023.09.16
프로세스  (0) 2023.09.13
리코쳇 로봇  (0) 2023.09.13