반응형
문제
다음의 점화식에 의해 정의된 수열 t(n)을 생각하자:
- t(0)=1
- t(n)=t(0)*t(n-1)+t(1)*t(n-2)+...+t(n-1)*t(0)
이 정의에 따르면,
- t(1)=t(0)*t(0)=1
- t(2)=t(0)*t(1)+t(1)*t(0)=2
- t(3)=t(0)*t(2)+t(1)*t(1)+t(2)*t(0)=5
- ...
주어진 입력 0 ≤ n ≤ 35에 대하여 t(n)을 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 n (0 ≤ n ≤ 35)이 주어진다.
출력
첫째 줄에 t(n)을 출력한다.
예제 입력 13 |
예제 출력 15 |
예제 입력 225 |
예제 출력 24861946401452 |
풀이
점화식을 통해 t(n)을 구하는 문제이다.
이미 문제에 점화식이 나와 있으므로, 구현만 잘 한다면 크게 어렵지 않은 문제이다.
t(n)을 구하기 위해 t(0), t(1), …, t(n-1) 이 필요하므로 메모이제이션을 활용해야 한다.
t(0)과 t(1)만 미리 dp 배열에 넣어놓고 나머지를 n까지 쭉 생성하는 방식으로 코드를 작성했다.
n = int(input())
dp = [1,1]
while(n+1 > len(dp)):
r = 0
for i in range(len(dp)):
r += dp[i]*dp[len(dp)-i-1]
dp.append(r)
print(dp[n])
반응형
'알고리즘 연습 > 동적 계획법' 카테고리의 다른 글
[🥈4 / 백준 2217 / 파이썬] 로프 (0) | 2021.08.10 |
---|---|
[🥈2 / 백준 9465 / 파이썬] 스티커 (0) | 2021.08.09 |
[🥈5 / 백준 14916 / 파이썬] 거스름돈 (0) | 2021.07.25 |
[🥉1 / 백준 2748 / 파이썬] 피보나치 수 2 (0) | 2021.07.21 |
[🥉1 / 백준 9625 / 파이썬] BABBA (0) | 2021.07.19 |