문제
![](https://velog.velcdn.com/images%2Fcosmos%2Fpost%2F92dc76fd-60e9-4826-a944-40542d8369bb%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-19%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%205.27.21.png)
풀이
DP | A | B |
---|
첫번째 | 0 | 1 |
두번째 | 1 | 1 |
세번째 | 1 | 2 |
네번째 | 2 | 3 |
다섯번째 | 3 | 5 |
여섯번째 | 5 | 8 |
- 위 테이블을 보면 수가 A와 B 둘 다
d[i] = d[i-1] + d[i-2]
점화식 규칙에 해당하는걸 확인할 수 있다.
- DP를 구현하기 위해 dp 테이블을 초기화하였으며, bottom-up 반복문형태로 구현하였다.
- 위 점화식 규칙을 코드로 구현하면 아래와 같다.
코드
import sys
input = sys.stdin.readline
def dp(k):
d_a = [0] * 46
d_b = [0] * 46
d_a[1], d_b[1] = 0, 1
d_a[2], d_b[2] = 1, 1
for i in range(3, k+1):
d_a[i] = d_a[i-1] + d_a[i-2]
d_b[i] = d_b[i-1] + d_b[i-2]
return d_a[k], d_b[k]
if __name__ == '__main__':
k = int(input())
print(*dp(k))
결과
![](https://velog.velcdn.com/images%2Fcosmos%2Fpost%2Fd88873cb-7d57-45f4-8ce6-6345ed7ea7c2%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-19%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%205.26.11.png)
출처 & 깃허브
BOJ 9625
github