BOJ-Algorithm

백준 9461 - 파도반 수열

bellhundred 2022. 1. 17. 20:46

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

 

9461번: 파도반 수열

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

www.acmicpc.net

import sys

input = sys.stdin.readline

n = int(input())
arr = [0]*101
arr[1] = 1
arr[2] = 1
arr[3] = 1
for i in range(4,101):
    arr[i] = arr[i-3]+arr[i-2]
for i in range(n):
    print(arr[int(input().strip())])

문제만 보면 어려워 보이긴 한데, 수열 사이에 규칙이 있다.

1,1,1,2,2,3,4,5,7,9....

n번째 값은 n-3번째 값과 n-2번째 값의 합이 된다.

첫 2 = 첫 1+두번째 1

두번째 2 = 두번쨰 1+세번째 1

3 = 세번째 1 + 첫 2

4 = 첫 2 + 두번째 2

....

그러므로 dp로 미리 값들을 싹 다 계산해서 arr에 넣어 둔 뒤 입력값 번호에 해당하는 arr을 넣어 주면 된다.

 

위 코드에서 arr[0]은 고려하지 않으므로 arr[i]는 i번째 삼각형의 변의 길이가 될 수 있다.