반응형
문제
피보나치 수는 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을 완성해 주세요.
나의 풀이
초기 코드 ( 시간초과, 오답)
function solution(n) {
var answer = 0;
function fibo(n){
if ( n == 0 ){
return 0
}
if (n == 1){
return 1
}
return fibo(n-1) + fibo(n-2)
}
answer = fibo(n) % 1234567
return answer;
}
다른이들의 정답
방법1.
function solution(n) {
let result = [];
for(let i =0; i <= n;i++){
if ( i == 0 ){
result.push(0)
}
if (i == 1){
result.push(1)
}
if (i >=2){
let sum = result[i-2] + result[i-1];
result.push(sum % 1234567)
}
}
let answer = result[n] % 1234567
return answer;
}
배열을 이용한 for문을 쓰는 것이였다.
배열을 이용할 수 있으면 그냥 배열 이용해서 돌려가면서 판단하는게 가장 좋은 가보다.
그리고 2이상 n 에서는 매번 1234567로 나눈 나머지를 돌려줬어야됐다..
방법2.
function fibonacci(num) {
if(num < 2) return num;
return fibonacci(num-1) + fibonacci(num-2);
}
또잉 이렇게 하면 또 시간초과가 안나나보다.. %1234567을 안했는데 상관없나보다.
근데 확실히 깔끔하다.
반응형
'코딩테스트' 카테고리의 다른 글
[프로그래머스] level2. 위장 (javascript) (0) | 2021.05.16 |
---|---|
[프로그래머스] level2. 다리를 지나는 트럭 (javascript) (0) | 2021.05.16 |
[프로그래머스] level1. 로또의 최고 순위와 최저 순위 (javascript) (3) | 2021.05.16 |
[프로그래머스] level2. 수식 최대화 (javascript) (0) | 2021.05.16 |
[프로그래머스] level2. [1차] 뉴스 클러스터링 (0) | 2021.05.10 |