
출처 :
https://www.acmicpc.net/problem/1003
1003번: 피보나치 함수
각 테스트 케이스마다 0이 출력되는 횟수와 1이 출력되는 횟수를 공백으로 구분해서 출력한다.
www.acmicpc.net
풀이 :
t = int(input())
zero = [1,0,1]
one = [0,1,1]
def fibo(num):
length = len(zero)
if num >= length:
for i in range(length, num+1):
zero.append(zero[i-2]+zero[i-1])
one.append(one[i-2]+one[i-1])
print(f'{zero[num]} {one[num]}')
for _ in range(t):
fibo(int(input()))
문제 부터 보면 피보나치 수열을 푸는 과정에서 결론적으로 0과 1의 조합이 몇 개 이냐를 물어보는 문제이다.
fibo(0) = 0
fibo(1) = 1
fibo(2) = fibo(1) + fibo(0) = 1 [1,1]
fibo(3) = fibo(2) +fibo(1) = [1,1] + [0,1] = [1,2]
fibo(4) = fibo(3) +fibo(2) = [1,2]+[1,1] = [2,3]
이런 과정으로 답을 도출 할 수 있다.
하지만 이를 코드로 fibo(2) + fibo(3) = [1,1,1,2] 이런 결과가 나와서 굉장히 곤란해지는 상황이 발생한다.
따라서 나는 0의 개수를 [1,0,1,1,2...] 이런 형태의 피보나치로 진행 시킬거고 1도 마찬가지로 진행 하겠다.
그런 다음 다이나믹 프로그래밍의 정의 : 하나의 문제는 단 한 번 풀고 넘어간다. 를 적용해서
배열된 길이를 센 다음 그 길이에서부터 우리가 구하는 값까지 계산하게 설정했다.
'코딩테스트' 카테고리의 다른 글
백준 1904 01 타일 - Python (0) | 2022.02.27 |
---|---|
백준 9148 신나는 함수 실행 - Python (0) | 2022.02.27 |
백준 9663 N-Queen - Python (0) | 2022.02.19 |
백준 14889 스타트와 링크 - Python (0) | 2022.02.12 |
백준 14888 연산자 끼워넣기 - python (0) | 2022.02.05 |