[4코1파] 4명의 안드로이드 개발자와 1명의 파이썬 개발자의 코딩 테스트 서막 : 4코1파

Rule :

하루에 1문제씩 풀기.
한 문제당 30분씩은 고민하기.
왜 그렇게 풀었는지 공유하기.
하루라도 놓친다면 벌금은 1,000원

START :

[3코1파] 2023.01.04~ (38일차)
[4코1파] 2023.01.13~ (29일차)

Today :

2023.02.10 [38일차]

프로그래머스 LV2
피보나치 수
https://school.programmers.co.kr/learn/courses/30/lessons/12945

문제 설명
피보나치 수는 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을 완성해 주세요.

제한사항

n은 2 이상 100,000 이하인 자연수입니다.

입출력 예

입출력 예 설명

피보나치수는 0번째부터 0, 1, 1, 2, 3, 5, ... 와 같이 이어집니다.

문제 풀이 방법

익히들어 소문으로 알고 있던 피보나치 수
DP 나 재귀로 풀 수 있는데, 피보나치 수 같은 경우에는 특히 재귀가 아니라 DP(Dynamic Programming)으로 풀어야 함
그래서 간단하게 dp를 이용해서 피보나치 수를 구하고 answer에 1234567 을 나눈 나머지를 return 해주는 간단히 쉬운 문제지만?

내가 구현했었던 dp함수로 하니까 런타임 에러가 나버림?

100000 을 넣었을 때도 잘 돌아가는지 확인해보래서 하는데
엥.. 커널이 죽어버렸슴니다..

그래서 다른 dp 피보나치 함수로 시도

굿

내 코드

def solution(n):

    def dp_fibo(n):
        fibo = [0] * (n+1)
        fibo[0], fibo[1] = 0,1
        
        for idx in range(2, n+1):
            fibo[idx] = fibo[idx-2] + fibo[idx-1]
        
        return fibo[n]
    
    n_fibo = dp_fibo(n)
    
    return n_fibo%1234567

증빙

다른 사람 풀이

케이스 리뉴얼이 되서 기존 버전의 코드가 가장 좋아요 이길래 패스

여담

억울하게 회사에 갇혀 있는 직장인들의 이것저것을 보장하라

profile
꿈꾸는 것도 개발처럼 깊게

0개의 댓글