문제 링크
문제 설명
피보나치 수는 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은 1이상, 100000이하인 자연수입니다.
입출력 예
n | return |
3 | 2 |
5 | 5 |
입출력 예 설명
피보나치 수는 0번째부터 0, 1, 1, 2, 3, 5, ... 와 같이 이어집니다.
코드
- 시간초과한 풀이
재귀함수는 시간이 매우 오래 걸림
# 피보나치 수 시간 초과 풀이
def Fibonacci(n):
if n == 0:
return 0
elif n == 1:
return 1
else :
return Fibonacci(n-1) + Fibonacci(n-2)
def solution(n):
return Fibonacci(n)%1234567
- test 통과한 풀이 - 리스트를 이용하여 점화식 만들기
리스트 끝부분에 append로 원소를 추가하는 것은 O(1)이므로 O(N). N은 100000이 최대 이므로 1초안에 출력 가능함
# 피보나치 수 성공한 풀이
def solution(n):
sol = [0,1]
for i in range(2, n+1):
sol.append(sol[i-2] + sol[i-1])
return sol[-1]%1234567
- test 통과한 풀이 - 딕셔너리를 이용해서 점화식 만들기
def solution(n):
answer ={}
answer[0] = 0
answer[1] = 1
for i in range(2, n+1):
answer[i] = answer[i-1] + answer[i-2]
return answer[n]%1234567
출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges
'프로그래머스 > lv2' 카테고리의 다른 글
lv2 게임 맵 최단거리 (1) | 2022.09.21 |
---|---|
lv2 타겟 넘버 (0) | 2022.09.20 |
lv2 JadenCase 문자열 만들기 (1) | 2022.09.20 |
lv2 N개의 최소 공배수 (0) | 2022.09.20 |
lV2 가장 큰 수 (0) | 2022.09.18 |