본문 바로가기

Algorithm/프로그래머스 연습 문제

프로그래머스 / 코딩 테스트 / 피보나치 수

문제 설명

 

 

문제 해결 시도

 

제한 사항에서 n > 1, n < 100000이라는 조건을 줬다.

n을 1234567로 나눈 나머지를 구하는 코드는 딱히 의미가 없다고 생각했다.

재귀 함수를 이용하여 피보나치 수를 구하도록 프로그램을 만들었고 채점을 진행했다.

 

def fibo(n):
    if n == 0 :
        return 0
    elif n == 1 :
        return 1
    else:
        return fibo(n - 2) + fibo(n - 1)
        
def solution(n):
    answer = 0
    answer = fibo(n)
    return answer

 

시간 초과 및 런타임 에러로 인하여 절반 정도의 테스트만 통과했다.

 

 

재귀 함수를 이용한 피보나치 수를 구하는 방법은 실행 속도가 다른 구현 방법에 비해 느리다.

반복문을 이용하여 피보나치 수를 구하는 프로그램을 만들었고 채점을 진행했다.

 

def fibo(n):
    if n == 0:
        return 0
    elif n == 1:
        return 1
    else:
        e1 = 0
        e2 = 1
        i = 2
        while i<= n:
            t = e2
            e2 = e2 + e1
            e1 = t
            i += 1
        return e2

def solution(n):
    answer = 0
    answer = fibo(n)
    return answer

 

실패 및 런타임 에러로 인하여 절반 정도의 테스트만 통과했다.

 

 

문제 해결

 

제한 사항을 봤을 때, 테스트를 통과하지 못할 요소가 존재하지는 않았다.

혹시 몰라서 1234567을 나눈 나머지를 구하는 코드를 추가해봤다.

 

def fibo(n):
    if n == 0:
        return 0
    elif n == 1:
        return 1
    else:
        e1 = 0
        e2 = 1
        i = 2
        while i<= n:
            t = e2
            e2 = e2 + e1
            e1 = t
            i += 1
        return e2 % 1234567

def solution(n):
    answer = 0
    answer = fibo(n)
    return answer

 

코드를 수정한 결과, 테스트를 통과했다.