여니의 취준 준비/코딩테스트 (Python)

[n13699] 점화식

여니's 2021. 8. 24. 18:30

https://www.acmicpc.net/problem/13699

 

13699번: 점화식

다음의 점화식에 의해 정의된 수열 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

www.acmicpc.net

매번 점화식을 재귀함수로 구하면

시간이 매우 오래걸려서

메모이제이션 방식을 사용하여 푼다.

 

처음엔, for문을 한 번만 돌리면 되는 줄 알았다.

n=3일경우

f(3)= f(0)*f(2) + f(1)*f(1) + f(2)*f(0)이니까

3번만 돌리면 되는 줄 알았는데

그게 아니었다...

 

array[1],array[2],array[3]... 

순서대로 값을 구해서 배열에 넣어야 점화식 문제를 풀 수 있다.

따라서 이중 for문을 사용해야한다.

 

array[0]의 값은 1로 고정시켜둔다.

 

i=1

array[1]=array[0]*array[0]

 

i=2

array[2]=array[0]*array[1]+array[1]*array[0]

 

i=3

array[3]=array[0]*array[2]+array[1]*array[1]+array[2]*array[0]

 

array[i]=array[j]*array[i-j-1]

 

# 점화식. 13699번
# 알고리즘 분류 : 다이나믹 프로그래밍, 메모이제이션
n = int(input())
array = [0 for _ in range(n + 1)]
array[0] = 1

for i in range(1, n + 1):
    for j in range(0, i, 1):
        array[i] += array[j] * array[i - j - 1]

print(array[n])

'''
array[1],array[2],array[3] .. 순차적으로 값을 구해서 array에 집어넣어야함.
이중 반복문 사용

'''

 

'여니의 취준 준비 > 코딩테스트 (Python)' 카테고리의 다른 글

[n16928] 뱀과 사다리 게임  (0) 2021.08.26
[n12919] A와 B 2 in python  (0) 2021.08.25
[n20207] 달력  (0) 2021.08.24
[n17276] 배열 돌리기 (in python)  (0) 2021.05.29
[n16926] 배열 돌리기 (python)  (0) 2021.05.26