< 풀이 >
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 |