똥그래미 코딩공장
백준 1003번(피보나치 함수) 파이썬 본문
https://www.acmicpc.net/problem/1003
1003번: 피보나치 함수
각 테스트 케이스마다 0이 출력되는 횟수와 1이 출력되는 횟수를 공백으로 구분해서 출력한다.
www.acmicpc.net
이 문제는 피보나치 함수의 0이 출력되는 횟수와 1이 출력 되는 횟수를 저장하여 뽑아내야 하는데 이 문제를 공책에 풀어보면서 규칙을 발견했다 0과 1의 출력 횟수가 피보나치 함수의 숫자와 동일하게 증가한다는 것을 알아냈다. 그래서 0과1의 횟수는 피보나치 함수의 정답과 동일한것이다. 그러나 한가지 다른점이 있다면 0의 갯수는 맨 앞에 1로 시작하는 것이다. 그래서 0의 횟수는 피보나치 함수의 수열 맨 앞에 1을 넣어 줘야 한다는 것이다 ex)0의 횟수=1,0,1,1,2,3,5,8......
1의 횟수 = 0,1,1,2,3,5,8.... 이므로 간단하게 피보나치 수열의 수들을 dp에 저장 해주면 된다.
import copy
import sys
n = int(sys.stdin.readline())
d = [0]*41
d[1] = 1
d[2] = 1
def fibo(x):
if x == 1 or x == 2:
return 1
if x == 0:
return 0
if d[x] != 0:
return d[x]
d[x] = fibo(x-1) + fibo(x-2)
return d[x]
for i in range (n):
x =int(sys.stdin.readline())
fibo(x)
d2 = copy.deepcopy(d) // 0의 횟수를 저장할 d2[]
d2.insert(0,1)// 0의 횟수는 맨앞에 1을 추가로 넣어줘야한다.
print(d2[x],d[x])
피보나치 수열을 dp에 적용하여 푸는 문제로 적당히 어려운 느낌의 문제였다. 풀면서 오랜만에 재밌는 느낌을 들었다. 그리고 풀었을때의 희열은 역시 좋았다
'Algorithm' 카테고리의 다른 글
| 백준 9012(괄호) 파이썬 (0) | 2022.12.21 |
|---|---|
| 백준 10250(ACM 호텔) 파이썬 (1) | 2022.12.21 |
| 백준 2839 (설탕배달) 파이썬 (0) | 2022.04.02 |
| 백준 1021(회전하는큐) 파이썬 (0) | 2022.03.11 |
| 백준 11866번(요세푸스 문제0) 파이썬 (0) | 2022.02.16 |