관리 메뉴

솜씨좋은장씨

[BaekJoon] 14495번 : 피보나치 비스무리한 수열 (Python) 본문

Programming/코딩 1일 1문제

[BaekJoon] 14495번 : 피보나치 비스무리한 수열 (Python)

솜씨좋은장씨 2022. 12. 1. 12:32
728x90
반응형

코딩 1일 1문제! 오늘의 문제는 백준의 피보나치 비스무리한 수열 입니다.

 

14495번: 피보나치 비스무리한 수열

피보나치 비스무리한 수열은 f(n) = f(n-1) + f(n-3)인 수열이다. f(1) = f(2) = f(3) = 1이며 피보나치 비스무리한 수열을 나열하면 다음과 같다. 1, 1, 1, 2, 3, 4, 6, 9, 13, 19, ... 자연수 n을 입력받아 n번째 피보

www.acmicpc.net

👨🏻‍💻 문제 풀이

이 문제는 말그대로 피보나치 비스무리한 수열을 구하는 문제로

기존에 피보나치 수열 문제를 풀어보았다면 아주아주 쉽게 풀 수 있는 문제입니다.

2022.06.15 - [Programming/코딩 1일 1문제] - [BaekJoon] 10870번 : 피보나치 수 5 (Python)

 

[BaekJoon] 10870번 : 피보나치 수 5 (Python)

코딩 1일 1문제! 오늘의 문제는 백준의 피보나치 수 5 입니다. 10870번: 피보나치 수 5 피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는

somjang.tistory.com

기존의 피보나치 수열의 규칙이 f(n) = f(n-1) + f(n-2) 라고 한다면 

피보나치 비스무리한 수열의 규칙은 f(n) = f(n-1) + f(n-3) 입니다.

def fibo_5(n):
    fibo_numbers = [0, 1, 1]
    
    if n > 2:
        for idx in range(n-2):
            new_fibo_num = fibo_numbers[idx+1] + fibo_numbers[idx+2]
            
            fibo_numbers.append(new_fibo_num)
            
    return fibo_numbers[n]

그래서 기존에 피보나치 수열의 코드에서 아주 조금만 수정하여 풀 수 있습니다.

기존 초기 리스트를 [0, 1, 1] 에서 [0, 1, 1, 1] 로 변경한 뒤에

입력받은 수가 3보다 클때 f(n) = f(n-1) + f(n-3) 규칙을 적용하여 그 다음 값을 구하도록 하였습니다.

fibo_list = [0, 1, 1, 1]

if N > 3:
    for idx in range(4, N+1):
        fibo_list.append(fibo_list[idx-1] + fibo_list[idx-3])

전체 코드는 아래를 참고해주세요.

👨🏻‍💻 코드 ( Solution )

def fibo_sim_num(N): 
    fibo_list = [0, 1, 1, 1]
    
    if N > 3:
        for idx in range(4, N+1):
            fibo_list.append(fibo_list[idx-1] + fibo_list[idx-3])
            
    return fibo_list[N]
    
    
if __name__ == "__main__": 
    N = int(input()) 
    print(fibo_sim_num(N))
 

GitHub - SOMJANG/CODINGTEST_PRACTICE: 1일 1문제 since 2020.02.07

1일 1문제 since 2020.02.07. Contribute to SOMJANG/CODINGTEST_PRACTICE development by creating an account on GitHub.

github.com

Comments