문제
https://school.programmers.co.kr/learn/courses/30/lessons/12945
풀이
- n은 2 이상이므로 for문은 2부터 시작한다. 그리고 0과 1에 대한 값을 미리 초기화해놔서 F(2)부터 구해나가는데 문제가 없도록 한다.
- F(n)에 도달하게 되어 다 구하면 for문이 종료되고 맨 마지막 값이 바로 피보나치 수가 된다.
- 맨 마지막에 1234567로 나누지 않고 중간중간 나누는 이유는 바로 오버플로우의 위험 때문이다. 피보나치 수는 일정 수준이 되면 수가 매우 커지는데 이때 오버플로우가 발생해 -값으로 변해 의도치 않은 값으로 변해버릴 수 있다. 따라서 중간에 틈틈히 1234567의 나머지로 바꿔주는 것이다.
function solution(n) {
const fiboArr = [0, 1];
for(let i = 2; i <= n; i++) {
fiboArr.push((fiboArr[i-2] + fiboArr[i-1]) % 1234567);
}
return fiboArr[fiboArr.length - 1];
}
'알고리즘 이론 & 풀이 > 프로그래머스' 카테고리의 다른 글
프로그래머스 Lv.0 | 저주의 숫자 3 (0) | 2023.09.02 |
---|---|
프로그래머스 Lv.2 | 괄호 회전하기 js (0) | 2023.08.11 |
프로그래머스 Lv.2 | (스택/큐) 기능개발 js (0) | 2023.08.09 |
프로그래머스 Lv.1 | (스택/큐) 같은 숫자는 싫어 js (0) | 2023.08.09 |
프로그래머스 Lv.2 | (DFS) 타겟 넘버 js (0) | 2023.08.09 |