본문 바로가기

코딩테스트/Programmers

[JAVA] 피보나치 수

< 풀이 >

class Solution {
    public int solution(int n) {
        int arr[]=new int[100001]; //배열 값[100000]에 접근하려면 크기가 1이라도 더 커야함
        arr[0]=0;
        arr[1]=1;
        
        for(int i=2;i<arr.length;i++){
            arr[i]=(arr[i-1]+arr[i-2])%1234567; //오버플로우가 발생하므로 매번 이렇게 저장해주기
        }
        int answer = arr[n];
        return answer;
    }
}

 

✏️ 풀이 방법

 

1. 피보나치 수를 저장하는 배열(arr) 생성

2. arr [0] =0, arr[1]=1 은 미리 초기화

3. 반복문을 돌며 arr [i]= arr[i-1] + arr[i-2]  규칙을 적용하여 배열에 값을 저장 

 

✍🏻 느낀점

 

 처음에 피보나치 수라고 해서, 냅다 재귀로 풀려고 했더니 너~무 복잡해지고, 어떻게 해야될지 몰라서 막막했던 것 같다.

그냥 간단하게 생각하고 접근법을 바꾸니 쉬운 문제였다. 하지만 이 문제에서 고려해야 할 점은 n은 2 이상 100000 이므로 배열의 크기를 100001로 설정해야한다. 처음에 100000 로 크기를 설정했다가 런타임에러가 났다. 왜냐하면 생각해보면, 배열의 길이가 100000 인 것이므로 마지막 인덱스는 99999 이기 때문에..! 이런거 사소한 거조차 놓치면 안된다는 것을 알게 되었다. 

 

 그리고 두 번째로는, 처음에 나는 마지막 부분 answer 에만 answer%1234567 을 해줬는데, 그렇게 하면 아래와 같은 문제가 있었다 !! 문제를 풀 때 자료형의 범위가 초과하는지 또한 중요하게 고려해야한다는 것을 깨닫게 되었다. 이번에 배운 걸 잊지 말고 앞으로 잘 적용해가며 문제를 풀어야겠다🔥

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

[JAVA] 카펫  (1) 2024.04.23
[JAVA] 짝지어 제거하기  (0) 2024.04.22
[JAVA] 다음 큰 숫자  (0) 2024.04.22
[JAVA] 숫자의 표현  (1) 2024.04.20
[JAVA] 이진 변환 반복하기  (1) 2024.04.18