Coding Test/BaekJoon_Python

백준 9461 <파도반 수열> Python

JunOnJuly 2023. 11. 4. 21:13
728x90

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

 

9461번: 파도반 수열

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

www.acmicpc.net


그림을 보며 규칙을 알아내기만 하면 쉽게 풀 수 있습니다.


def solution(T, data_list):
    # 데이터 리스트 중 최댓값
    max_list = max(data_list)
    # DP
    memo = [0 for _ in range(101)]
    # 앞부분 채우기
    memo[0:6] = [1, 1, 1, 1, 2, 2]

    i = 6
    while True:
        # 중단조건
        if i == max_list + 1:
            break
        # 점화식
        memo[i] = memo[i-5] + memo[i-1]
        i += 1

    # 출력
    for data in data_list:
        print(memo[data])


T = int(input())
data_list = [int(input()) for _ in range(T)]
solution(T, data_list)

'''
그림을 통해 6~10 번째 삼각형을 분석해보자면
6 번째 삼각형은 1,5 번째 삼각형의 변을 더하고
7 번째 삼각형은 2,6 번째 삼각형의 변을 더하고
.
.
.
n 번째 삼각형은 n-5,n-1 번째 삼각형의 변을 더한다
그렇다면 n <= 5 인 경우는 음수 인덱스를 어떻게 처리할 것인가 에 대해
규칙대로 더해야 할 인덱스를 정리한 후 음수 인덱스의 값을 임의로 정해 처리한다
혹은 5번째 인덱스까지 미리 채워두면 쉽게 해결할 수 있다

index      -3    -2     -1      0       1       2       3      4      5     6     7    8      9    10    11
value       0     0      1      1       1       1       1      2      2     3     4    5      7    9     12
index_sum                             -4,0 / -3,1 /  -2,2 / -1,3 /  0,4 / 1,5 / 2,6 / 3,7 / 4,8 / 5,9 / 6,10
'''

 

728x90