[백준/Python] BOJ 9461 - 파도반 수열

NAGANG LEE·2023년 10월 30일

알고

목록 보기
35/118

👀 문제

9461번: 파도반 수열 ✨ 실버 3

그림과 같이 삼각형이 나선 모양으로 놓여져 있다. 첫 삼각형은 정삼각형으로 변의 길이는 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])
profile
모바일 개발자를 목표로 하고 있어요 💭

0개의 댓글