백준 9461 - 파도반 수열 (Python)

2024. 2. 13. 07:05알고리즘

문제

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

 

9461번: 파도반 수열

오른쪽 그림과 같이 삼각형이 나선 모양으로 놓여져 있다. 첫 삼각형은 정삼각형으로 변의 길이는 1이다. 그 다음에는 다음과 같은 과정으로 정삼각형을 계속 추가한다. 나선에서 가장 긴 변의

www.acmicpc.net

풀이

n = int(input())
memo = {}
memo[1] = 1
memo[2] = 1
memo[3] = 1
memo[4] = 2
memo[5] = 2

def a(i):
    if i not in memo:
        memo[i] = a(i-1) + a(i-5)
    return memo[i]

for i in range(n):
    print(a(int(input())))

단순한 DP 문제이다.

N이 1~5일때는 딱히 규칙이 없는 것 같고,

N이 6 이상일때는 N-1번째 삼각형과 N-5번째 삼각형의 변의 길이를 합친 값이 N번째 삼각형의 변의 길이가 되는 것을 주어진 그림을 통해 확인할 수 있다.

 

memo라는 배열을 만들어 놓고 재귀함수와 memoization을 사용하여 풀이하였다.