[백준] 1003번 피보나치 함수
7273 단어 알고리즘다이나믹 프로그래밍백준파이썬다이나믹 프로그래밍
알고리즘
- DP
- bottom-up
- 메모이제이션
설명
- 피보나치 수를 재귀 함수로 구현했을 때 fibo(0), fibo(1) 함수가 몇 번 호출되는지 카운트 하는 문제
- 재귀 함수에서 그대로 카운트할 경우 시간 초과
- bottom-up 방식으로 중복 호출을 방지
구현 방법
- n+1 길이의 리스트 초기화
- 2부터 n까지 돌면서
- (i번째 0 호출 횟수) = (i-1번째 0 호출 횟수) + (i-2번째 0 호출 횟수)
- (i번째 1 호출 횟수) = (i-1번째 1 호출 횟수) + (i-2번째 1 호출 횟수)
링크
코드
def init():
n = int(input())
fibo = [[0, 0] for _ in range(n+1)]
if len(fibo) > 0: fibo[0] = [1, 0]
if len(fibo) > 1: fibo[1] = [0, 1]
return n, fibo
tc = int(input())
for _ in range(tc):
n, fibo = init()
if n == 0:
print(1, 0)
elif n == 1:
print(0, 1)
else:
for i in range(2, n+1):
fibo[i][0] = fibo[i-1][0] + fibo[i-2][0]
fibo[i][1] = fibo[i-1][1] + fibo[i-2][1]
print(fibo[n][0], fibo[n][1])
Author And Source
이 문제에 관하여([백준] 1003번 피보나치 함수), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@leehj8896/백준-1003번-피보나치-함수
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
- 피보나치 수를 재귀 함수로 구현했을 때 fibo(0), fibo(1) 함수가 몇 번 호출되는지 카운트 하는 문제
- 재귀 함수에서 그대로 카운트할 경우 시간 초과
- bottom-up 방식으로 중복 호출을 방지
구현 방법
- n+1 길이의 리스트 초기화
- 2부터 n까지 돌면서
- (i번째 0 호출 횟수) = (i-1번째 0 호출 횟수) + (i-2번째 0 호출 횟수)
- (i번째 1 호출 횟수) = (i-1번째 1 호출 횟수) + (i-2번째 1 호출 횟수)
링크
코드
def init():
n = int(input())
fibo = [[0, 0] for _ in range(n+1)]
if len(fibo) > 0: fibo[0] = [1, 0]
if len(fibo) > 1: fibo[1] = [0, 1]
return n, fibo
tc = int(input())
for _ in range(tc):
n, fibo = init()
if n == 0:
print(1, 0)
elif n == 1:
print(0, 1)
else:
for i in range(2, n+1):
fibo[i][0] = fibo[i-1][0] + fibo[i-2][0]
fibo[i][1] = fibo[i-1][1] + fibo[i-2][1]
print(fibo[n][0], fibo[n][1])
Author And Source
이 문제에 관하여([백준] 1003번 피보나치 함수), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@leehj8896/백준-1003번-피보나치-함수
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
코드
def init():
n = int(input())
fibo = [[0, 0] for _ in range(n+1)]
if len(fibo) > 0: fibo[0] = [1, 0]
if len(fibo) > 1: fibo[1] = [0, 1]
return n, fibo
tc = int(input())
for _ in range(tc):
n, fibo = init()
if n == 0:
print(1, 0)
elif n == 1:
print(0, 1)
else:
for i in range(2, n+1):
fibo[i][0] = fibo[i-1][0] + fibo[i-2][0]
fibo[i][1] = fibo[i-1][1] + fibo[i-2][1]
print(fibo[n][0], fibo[n][1])
Author And Source
이 문제에 관하여([백준] 1003번 피보나치 함수), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@leehj8896/백준-1003번-피보나치-함수
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
def init():
n = int(input())
fibo = [[0, 0] for _ in range(n+1)]
if len(fibo) > 0: fibo[0] = [1, 0]
if len(fibo) > 1: fibo[1] = [0, 1]
return n, fibo
tc = int(input())
for _ in range(tc):
n, fibo = init()
if n == 0:
print(1, 0)
elif n == 1:
print(0, 1)
else:
for i in range(2, n+1):
fibo[i][0] = fibo[i-1][0] + fibo[i-2][0]
fibo[i][1] = fibo[i-1][1] + fibo[i-2][1]
print(fibo[n][0], fibo[n][1])
Author And Source
이 문제에 관하여([백준] 1003번 피보나치 함수), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@leehj8896/백준-1003번-피보나치-함수저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)