Binary Journey

[Javascript][메모] 프로그래머스 피보나치 수, 2 x n 타일링 본문

프로그래머스/메모

[Javascript][메모] 프로그래머스 피보나치 수, 2 x n 타일링

binaryJournalist 2021. 4. 22. 16:32
반응형

출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges

 

 

일단 피보나치 수에서 내가 쓴 함수는 이렇다.

 

 

** Javascript

 

function solution(n) {
    let a1 = 0, a2 = 1;
    let answer = [a1, a2];
    for (var i = 2; i <= n; i++) {
        answer.push((answer[i - 1] + answer[i - 2]) % 1234567);
    }
    // return answer[n] ?? 0;
    return answer[n] ? answer[n] : 0;
}

 

처음에 null 병합 연산자 이용해서 return 했는데 프로그래머스에서는 ES6가 안되는지 에러났었다.

 

그래서 answer[n] ? answer[n] : 0 으로 변경

 

 

 

** Python (2021.11.23)

 

def solution(n):
    a1 = 0
    a2 = 1
    answer = 0
    for i in range(n - 1):
        answer = a1 + a2
        a1 = a2
        a2 = answer
    return answer % 1234567

 

 

 

 

2 x n 타일링도 결국 피보나치 함수 물어보는 것이기에 이렇게 했다.

위 코드와 거의 같다.

 

function solution(n) {
    let arr = [1, 2];
    for (var i = 2; i <= n; i++) {
        arr.push((arr[i-1] + arr[i-2]) % 1000000007);
    }
    return arr[n-1] ? arr[n-1] : 0;
}

 

 

 

 

아래 식들을 이용하여 해봤는데 시간초과, 런타임에러 떠서 다 실패함.

 

 

 

 

썼던 함수들은 나중에 꺼내보려고 잠시 기록해둔다.

 

 

이건 for문 사용해서 만든 함수

function fibonacciGeneral(number) {
    let result = 0;
    let a1 = 0, a2 = 1;
    if (number <= 0) return a1;
    if (number === 1) return a2;
    for (var i = 0; i < number; i++) {
        result = a1 + a2;
        a1 = a2;
        a2 = result;
    }
    return result;
}

 

 

재귀함수 호출한 것은 이것

 

function fibonacciRecursion(n) {
    return n <= 1 ? n : fibonacciRecursion(n - 1) + fibonacciRecursion(n - 2);
}

 

 

위의 경우 77과 같은 큰 수를 넣었을 때 답이 나오지만 아래의 경우 큰 수는 계산이 오래 걸려서 답이 안 나올 수도 있음

반응형