hi jaeneee

baekjoon(9461-파도반 수열)_python 본문

알고리즘/baekjoon

baekjoon(9461-파도반 수열)_python

ash silver 2022. 8. 12. 11:35

1) 문제

2) 예시

 

3) 제출

# 첫 번째 제출한 코드

import sys
input = sys.stdin.readline

padovan = []
def padovan(n):
    if n <= 3:
        return 1
    elif n <= 5:
        return 2
    elif n <= 8:
        return n - 3
    elif n == 9:
        return 7
    elif n == 10:
        return 9
    else:
        return padovan(n - 1) + padovan(n-5)

result = list()

for i in range(0, int(input())):
    result.append(padovan(int(input())))

print(*result, sep="\n")
#두 번째 제출한 코드

import sys
input = sys.stdin.readline

question = []

for i in range(0, int(input())):
    question.append(int(input()))

padovan = [0] * (max(question) + 1)

padovan[1], padovan[2], padovan[3] = 1, 1, 1
padovan[4], padovan[5] = 2, 2
padovan[6], padovan[7], padovan[8] = 3, 4, 5
padovan[9] = 7
padovan[10] = 9

for i in range(11, max(question) + 1):
    padovan[i] = padovan[i - 1] + padovan[i - 5]

for i in question:
    print(padovan[i])

4) 메모리/시간/코드 길이

5) PLUS

함수에 그때마다 호출하는 방법을 사용했는데 시간 초과가 떴다.

전에 dp 문제로 피보나치수열을 풀었을 때도 저런 코드로 했더니 시간 초과가 나서 두 번째 코드처럼 리스트에 넣고 계산하는 시간을 줄였다.

이번에도 비슷하게 리스트에 넣고 계산하는 시간을 줄이고 전에 넣었던 리스트에서 호출하기만 하면 돼서 시간이 줄게 된다.

 

파도반 함수는 사실 잘 몰라서 구글링해 수열의 규칙을 찾았다.

Comments