[Node.js_4기] 코드카타 : 피보나치 수열 (24/02/26)
2024. 2. 26. 09:20ㆍ공부/코테준비
목차
1. 문제
코딩테스트 연습 - 피보나치 수 | 프로그래머스 스쿨 (programmers.co.kr)
- 문제 설명
피보나치 수는 F(0) = 0, F(1) = 1일 때, 1 이상의 n에 대하여 F(n) = F(n-1) + F(n-2) 가 적용되는 수 입니다.
예를들어
F(2) = F(0) + F(1) = 0 + 1 = 1
F(3) = F(1) + F(2) = 1 + 1 = 2
F(4) = F(2) + F(3) = 1 + 2 = 3
F(5) = F(3) + F(4) = 2 + 3 = 5
와 같이 이어집니다.
2 이상의 n이 입력되었을 때, n번째 피보나치 수를 1234567으로 나눈 나머지를 리턴하는 함수, solution을 완성해 주세요.
- 제한 사항
n은 2 이상 100,000 이하인 자연수입니다.
입출력 예
2. 시도
function solution(n) {
let answer = 0;
let f0 = 0;
let f1 = 1;
for(let i = 2; i <= n;i++){
answer = f0+f1
f0=f1;
f1=answer;
}
return answer%1234567;
}
쉽구만.
테스트 1 〉 | 통과 (0.03ms, 33.4MB) |
테스트 2 〉 | 통과 (0.03ms, 33.4MB) |
테스트 3 〉 | 통과 (0.03ms, 33.4MB) |
테스트 4 〉 | 통과 (0.05ms, 33.5MB) |
테스트 5 〉 | 통과 (0.05ms, 33.5MB) |
테스트 6 〉 | 통과 (0.06ms, 33.4MB) |
테스트 7 〉 | 실패 (0.08ms, 33.4MB) |
테스트 8 〉 | 실패 (0.06ms, 33.4MB) |
테스트 9 〉 | 실패 (0.08ms, 33.5MB) |
테스트 10 〉 | 실패 (0.14ms, 33.4MB) |
테스트 11 〉 | 실패 (0.09ms, 33.5MB) |
테스트 12 〉 | 실패 (0.06ms, 33.4MB) |
테스트 13 〉 | 실패 (2.61ms, 37.5MB) |
테스트 14 〉 | 실패 (3.93ms, 37.4MB) |
어째서...?
-> 피보나치 수는 매우 빠르게 증가하기 때문에 매우 큰 숫자(ex 10만번째 피보나치 수)가 등장할 경우 오버플로우가 발생.
3. 결과
function solution(n) {
let answer = 0;
let f0 = 0;
let f1 = 1;
for(let i = 2; i <= n;i++){
answer = (f0+f1)%1234567;
f0=f1;
f1=answer;
}
return answer;
}
1234567을 나누는 이유 = 오버플로우 방지
4. 배운점
문제풀이 자체는 어렵지 않았으나, 오버플로우를 생각하지 못하고 있었다.
'공부 > 코테준비' 카테고리의 다른 글
[Node.js_4기] 코드카타 : 할인행사 (24/03/08) (0) | 2024.03.11 |
---|---|
[Node.js_4기] 코드카타 : n개의 최소 공배수 (24/03/07) (0) | 2024.03.07 |
[Node.js_4기] 코드카타 : 이진 변환 반복하기 (24/02/22) (0) | 2024.02.22 |
[Node.js_4기] 알고리즘 : JadenCase 문자열 만들기 (24/02/21) (0) | 2024.02.21 |
[Node.js_4기] 코드카타 : 둘만의 암호 (24/02/15) (1) | 2024.02.15 |