문제 설명
https://school.programmers.co.kr/learn/courses/30/lessons/12945

제한 사항

입출력 예

풀이
class Solution {
public int solution(int n) {
final int val = 1234567;
int pre = 0;
int post = 1;
int answer = 0;
for (int i = 0; i < n - 1; i++) {
pre %= val;
post %= val;
answer = (pre + post) % val;
pre = post;
post = answer;
}
return answer;
}
}
후기
피보나치 수 자체는 구현하기 어렵지 않지만 문제는 n이 100,000까지라는 것이다. n이 500인 피보나치 수만 해도
139423224561697880139724382870407283950070256587697307264108962948325571622863290691557658876222521294125이다... 그러므로 10만인 값은 long형으로도 담을 수가 없다. 계산한다 하더라도 모니터 화면 넘어서까지 쭉 이어질 것이다. 그렇기 때문에 계산을 우회할 방법을 찾아야 하는데 문제의 의도는 최종 결과를 1234567으로 나눈 나머지를 구하라는 것이다.

이 방법을 이용하면 해결 된다. 하지만 나는 아직 잘 이해가 안 된다...
해설 링크: https://school.programmers.co.kr/learn/courses/14743/lessons/116435
'코딩테스트 (프로그래머스) > Java' 카테고리의 다른 글
| [프로그래머스][JAVA][Lv. 2] 구명보트 (0) | 2023.08.14 |
|---|---|
| [프로그래머스][JAVA][Lv. 1] 이상한 문자 만들기 (0) | 2023.08.13 |
| [프로그래머스][JAVA][Lv. 2] 다음 큰 숫자 (0) | 2023.08.11 |
| [프로그래머스][JAVA][Lv. 1] 문자열 내 p와 y의 개수 (0) | 2023.08.10 |
| [프로그래머스][JAVA][Lv. 1] 약수의 합 (0) | 2023.08.10 |