
그림과 같이 삼각형이 나선 모양으로 놓여져 있다. 첫 삼각형은 정삼각형으로 변의 길이는 1이다. 그 다음에는 다음과 같은 과정으로 정삼각형을 계속 추가한다. 나선에서 가장 긴 변의 길이를 k라 했을 때, 그 변에 길이가 k인 정삼각형을 추가한다.
파도반 수열 P(N)은 나선에 있는 정삼각형의 변의 길이이다. P(1)부터 P(10)까지 첫 10개 숫자는 1, 1, 1, 2, 2, 3, 4, 5, 7, 9이다.
N이 주어졌을 때, P(N)을 구하는 프로그램을 작성하시오.
다이나믹 프로그래밍
삼각형 그림을 이어 그려보면 아래와 같이 결과가 나온다.
P(11) = 12, P(12) = 16, P(13) = 21 ...
조금 생각하니 금방 규칙을 깨달을 수 있었다.
N이 5보다 클 때 규칙은 다음과 같다. 😋
P(N) = P(N-1) + P(N-5)
import sys
input = sys.stdin.readline
T = int(input())
P = [0, 1, 1, 1, 2, 2, 3, 4, 5, 7, 9]
# N이 1부터 100까지니까 쭉 추가해 주기
# P(N) = P(N-1) + P(N-5)
for i in range(11, 101):
P.append(P[i-1] + P[i-5])
for _ in range(T):
N = int(input())
print(P[N])