문제
![](https://velog.velcdn.com/images%2Fcosmos%2Fpost%2F60315c4e-5399-4e94-a33d-0e70e7e044ab%2F%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202022-02-21%20%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB%201.41.37.png)
풀이
- 피보나치 + 점화식 문제로 대표적인
다이나믹 프로그래밍
문제이다.
n | 값 |
---|
0 | 1 |
1 | 1 |
2 | 2 |
3 | 4 |
4 | d[n-1] + d[n-2] + d[n-3] + d[n-4] |
5 | d[n-1] + d[n-2] + d[n-3] + d[n-4] |
- 위 테이블과 문제 조건에서 확인할 수 있듯이 n이 4이상일 때부터 일정 규칙을 따르므로 해당 규칙을 구현하면 된다.
- bottom-up 방식으로 구현했다.
코드
import sys
input = sys.stdin.readline
def dp(n):
d = [0] * 68
d[0] = 1
d[1] = 1
d[2] = 2
d[3] = 4
for i in range(4, n+1):
d[i] = d[i-1] + d[i-2] + d[i-3] + d[i-4]
return d[n]
if __name__ == '__main__':
t = int(input())
nums = [int(input()) for _ in range(t)]
for x in nums:
print(dp(x))
결과
![](https://velog.velcdn.com/images%2Fcosmos%2Fpost%2F756c6720-1bd7-4720-93f2-30f185d4ee62%2F%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202022-02-21%20%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB%201.54.23.png)
출처 & 깃허브
BOJ 9507
github