https://school.programmers.co.kr/learn/courses/30/lessons/12945#qna

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 
피보나치 수 % 1234567의 나머지를 구하면 되는 매우 간단한 문제라고 생각했다. 
 

function solution(n) {
    var answer = 0;
   const fibo = (x,y,cnt)=>{
         if(cnt<=n){
             y =y%1234567;
             return fibo(y,x+y,cnt+1);
         }
         else return y;
     }
    
 
    return fibo(0,1,2);
}

 
처음에는 피보나치라는 단어를 보자마자 아무생각없이 재귀함수를 작성했는데,
 
자연수 n은 n<=100,000이라는 조건으로 인해
 
n번째 피보나치 수가 int의 자료구조 범위를 벗어나는 정수 오버플로우(integer overflow)가 발생했다. 
재귀함수도 마찬가지로, 너무 잦은 재귀함수 호출로 인해 스택 오버플로우가 발생한 것 
 
2단계 문제 치고 너무 쉽다 했어 ~.~
 
 

function solution(n) {
    var answer = 0;
    let x = 0;
    let y = 1;

    
    for(let i=1; i<n; i++){
        let temp = x;
        x = y;
        y = (y+temp)%1234567;
        
    }
    return y;
}

최종 답은 이것 
 
중간중간 나머지 계산을 해주고, 재귀함수 대신 반복문을 사용하는 것으로 문제를 해결했다.

728x90

+ Recent posts