728x90
https://www.acmicpc.net/problem/9461
<접근 방법>
파도반 수열의 규칙을 찾는 문제이다. 아래 그림을 살펴보자.

위의 그림을 처음부터 단계적으로 진행해 보면서 규칙을 찾아보자.
$P(1)=P(2)=P(3)=1$
$P(4)=P(1)+P(3)=2$
$P(5)=P(4)=2$
$P(6)=P(5)+P(1)=2+1=3$
...
위의 규칙을 살펴보면 다음의 규칙을 찾을 수 있다.
$P(N <= 0) = 0$
$P(N >= 5) = P(N - 1) + P(N - 5)$
따라서 1 ~ 4까지의 값은 먼저 fix한 다음 위의 공식을 적용하면 해결할 수 있다.
<소스 코드>
위의 코드를 이용한 전체 소스 코드 구현 결과이다.
import sys
n = int(sys.stdin.readline())
tri = [0 for _ in range(101)]
tri[1] = 1
tri[2] = 1
tri[3] = 1
tri[4] = 2
for i in range(n):
k = int(sys.stdin.readline())
for j in range(5, k + 1):
if tri[j] == 0:
st, ed = j - 5, j - 1
if st <= 0:
temp = 0
else:
temp = tri[st]
if ed <= 0:
temp2 = 0
else:
temp2 = tri[ed]
tri[j] = temp + temp2
print(tri[k])
728x90
'알고리즘 노트 > BOJ' 카테고리의 다른 글
BOJ 1463: 1로 만들기- 파이썬(Python) (1) | 2024.11.12 |
---|---|
BOJ 1003: 피보나치 함수- 파이썬(Python) (0) | 2024.11.10 |
BOJ 1436: 반전 요세푸스- 파이썬(Python) (1) | 2024.11.07 |
BOJ 17290: Crazy_aRcade_Good - 파이썬(Python) (1) | 2024.10.22 |
BOJ 11053: 가장 긴 증가하는 부분 수열 - 자바(java) (0) | 2024.09.23 |