💻 문제 출처 : 프로그래머스_피보나치 수
👉 내가 작성한 답
class Solution {
public int solution(int n) {
int answer = 1;
int answerBefore = 0;
for(int i = 2; i <= n; i++) {
int temp = answer;
answer = (answer + answerBefore) % 1234567;
answerBefore = temp;
}
return answer;
}
}
- 📌 접근 방식
- 재귀로 풀면 Stack Overflow 에러 발생 ⇒ Map으로 캐시 저장해도 발생
- n이 100,000 이하라 int나 long으로 해결 불가
- ⇒ 반복문으로 구현
- 📌 문제 풀이 설명
- int 변수 answer에 1을 대입하고, int 변수 answerBefore에 0을 대입
- 피보나치 수 0번째와 1번째가 0과 1이기 때문
- for문으로 2부터 n이하까지 1씩 증가하며 순회
- 피보나치 수 0번째와 1번째는 변수에 선언하여 계산한 것과 같기 때문에 구해야 하는 2부터 순회
- int 변수 temp에 answer 대입
- answer에 (answer + answerBefore) 에서 1234567을 나눈 나머지 값을 대입
- n번째 피보나치 수에서 1234567을 나눈 나머지 값을 구해야 함
- (answer % 1234567) + (answerBefore % 1234567) == (answer + answerBefore) % 1234567
- answerBefore에 temp 대입
- for문 종료 후 return answer