728x90
#9461 파도반 수열
나의 풀이
num_list=[1,1,1,2,2]
n = int(input())
for i in range(n):
a = int(input())
for j in range(len(num_list), a):
new_num=num_list[j-1]+num_list[j-5]
num_list.append(new_num)
print(num_list[a-1])
파도반 수열이라는 것이 무엇인지 몰라서 그림에서 규칙을 찾았다. n번째 삼각형의 변이 n-1번째 삼각형과 n-5번째 삼각형과 맞다아 있어서 P(n) = P(n-1) + P(n-5)라는 식을 이끌어내었고 그것을 기반으로 코드를 작성하였다.
소스코드의 흐름을 보자면 이미 구성된 num_list의 길이 이후부터 고려하여 목표값까지 P(n)을 계산하여 집어넣어주고 목표값을 출력해주는 방식이다. 한기지 우려되었던 점이 있는데 len(num_list)가 a보다 큰 경우이다. 그러나 그런 경우에는 에러가 뜨는것이 아니라 알아서 넘어가는 것으로 확인되었다. 코드를 작성하고 대중적인 코드를 보니 뭔가 달랐다.
실제 파도반 수열 점화식을 이용한 풀이
pdb = [0 for i in range(101)]
pdb[1] = 1
pdb[2] = 1
pdb[3] = 1
for i in range(0, 98):
pdb[i + 3] = pdb[i] + pdb[i + 1]
t = int(input())
for i in range(t):
n = int(input())
print(pdb[n])
알아보니 파도반 수열의 점화식은 P(n)=P(n-3)+P(n-2)였다. 나의 규칙도 오류는 없기 때문에 백준에서도 정답으로 나왔겠지만 초기값이 5개가 필요했던 나의 점화식과는 달리 실제 점화식을 이용하면 초기값이 3개로 준다. 그리고 문제에서 요구하는 N값의 최대가 100이니 미리 리스트를 만들어두고 출력해주는 것을 볼 수 있었다. 나의 코드가 좀더 범용적이지만 이중 for문은 언제나 기피 대상이기에 문제에서 요구하는 방식으로 리스트를 필요한 만큼만 만들어두고 출력하는 것이 좋아보인다.
728x90
'Sketch (Programming Language) > Python' 카테고리의 다른 글
Baekjoon Training #10844 (3) | 2023.02.02 |
---|---|
Baekjoon Training #2579 (0) | 2023.01.31 |
Baekjoon Training #1446 (0) | 2023.01.27 |
Baekjoon Training #1620 (0) | 2023.01.26 |
Baekjoon Training #15650 (0) | 2023.01.21 |