하루에 1문제씩 풀기.
한 문제당 30분씩은 고민하기.
왜 그렇게 풀었는지 공유하기.
하루라도 놓친다면 벌금은 1,000원
[3코1파] 2023.01.04~ (38일차)
[4코1파] 2023.01.13~ (29일차)
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
증빙
다른 사람 풀이
케이스 리뉴얼이 되서 기존 버전의 코드가 가장 좋아요 이길래 패스
여담
억울하게 회사에 갇혀 있는 직장인들의 이것저것을 보장하라